相信经过前几次的屏幕中插入对象长度、对象周长的代码编写,你应该对插入数值到图纸中的代码已经了然于心了。
那么,再次使用lisp实现一个我们更为常规,使用频繁的功能:查询封闭图形的面积,并将面积插入到图纸中。
根据前几次文章的插入数值到图纸中的代码,可以稍作修改用于面积插入,如下:
(setq ch1 (strcat "面积:" mj "mm2")) ;输出长度 (setq ch2 (getpoint "\n屏幕单击插入点")) ;屏幕中指定插入点 (entmake (list '(0 . "text") ;建立文字图元属性列表,文字,插入点,内容,字高 (cons 10 ch2) (cons 11 ch2) (cons 1 ch1) '(40 . 350) ) )
那么,只需要再编写以下测量对象面积的代码即可。综合两个代码,便可以实现lisp。
编写查询面积代码如下:
(setq a (vlax-ename->vla-object (car (entsel "\选择对象: ")))) (setq b (vla-get-area a)) (setq c (rtos b ))
代码解释如下:
第一行:通过entsel获取图形的程序语言,car读取图形的名字。vlax-ename->vla-object将对象转变成vla对象。以运行第二行代码。
第二行:vla-get-area函数功能是,获取图形的面积。稍微会写单词,就能读懂这个函数名,vla即vla对象,get读取,area对象的面积。
第三行:rtos即将数据转换为字符串,以服务输出代码。
将两种功能的代码结合,并定义lisp的引用快捷键即函数名为mj(面积的首字母)。那么便可得到完整的插件内容。
(defun C:mj() ;查询对象面积 (setq a (vlax-ename->vla-object (car (entsel "\选择对象: ")))) (setq b (vla-get-area a)) (setq c (rtos b )) ;将周长插入到图纸中 (setq ch1 (strcat "面积:" c "mm2")) ;输出面积 (setq ch2 (getpoint "\n屏幕单击插入点")) ;屏幕中指定插入点 (entmake (list '(0 . "text") ;建立文字图元属性列表,文字,插入点,内容,字高 (cons 10 ch2) (cons 11 ch2) (cons 1 ch1) '(40 . 350) ) ) (prin1) )
代码运行结果,详见如下动图演示。
以上,你有更加了解了lisp的运行呢?单独看这篇还是没能很好的理解的话,建议将之前的测量长度、测量周长,结合起来一起查看。你一定会有所收获。
(完)


评论