已经完成的计算,怎么将计算结果插入到屏幕中。
例:电气专业中的单相负荷计算电流
之前已经编辑出电流计算的程序,结果是只能在命令行显示,怎么将结果通过鼠标直接插入到cad图中呢。
Cad中显示的内容对于lisp而言,是图元,因此如果要实现显示,则需要一个可以建立图元的函数即entmake。通过这个函数将结果插入到屏幕中。实现代码如下:
(setq b (rtos i 2 2)) ;将数据结果由实数转换成字符串,且设置为两个精度,即小数点后两位
(setq a (getpoint "\n屏幕单击插入点")) ;指定插入点
(entmake (list '(0 . "text") ;建立文字图元属性列表,文字,插入点,内容,字高
(cons 10 a)
(cons 11 a)
(cons 1 b)
'(40 . 350)
)
)
动图演示:
完整代码如下:
(defun c:dxjs () ;定义单相计算电流的函数名称,即cad的命令快捷键
(setq p1 (entsel));通过鼠标读取cad图中的数据对象,entsel是鼠标选取cad对象的函数。
;此语句意思:通过鼠标选取功率数据p,并将对象赋值给变量p1.
(setq p1 (car p1)) ;cad中的对象是lisp中的图元.car是读取对象的图元名,为之后读取图元属性列表中存储的数据做准备。
;此语句意思:将功率的图元名赋值给变量p1.
(setq p1_data (entget p1))
;数据内容是存储在图元属性列表中的.entget是读取功率图元的属性列表(如果不好理解,你可以理解为cad中的特性).
;此语句意思:读取功率图元的属性列表,并赋值给变量p1_data.
(setq p1_data (assoc 1 p1_data))
;从图元属性列表中提取出功率的数据值.assoc是获取属性列表里的具体哪一项内容(比如图层、颜色)。
;1是数据内容中在属性列表里的代码(可以理解成找数据,开存数据的那个抽屉,这个抽屉上的编号是1)
;此语句意思:提取到功率图元的内容的属性表(即把抽屉拉开了,东西还没取出来)。
(setq p1_value (atof (cdr p1_data)))
;将字符串转换成实数。
;此语句意思:从数据表里获取数据内容,并将这个数据转换为实数值(从抽屉里取出数据了,但是数据是个串串,你得变成数字)
(princ "单相设备功率:")
(princ p1_value) ;在命令行输出功率值
(setq k1 (entsel)) ;同样方式,获取需要系数的数据值。
(setq k1 (car k1))
(setq k1_data (entget k1))
(setq k1_data (assoc 1 k1_data))
(setq k1_value (atof (cdr k1_data)))
(princ "需要系数:")
(princ k1_value)
(setq fi1 (entsel)) ;同样方式,获取功率因数的数据值。
(setq fi1 (car fi1))
(setq fi1_data (entget fi1))
(setq fi1_value (assoc 1 fi1_data))
(setq fi1_value (atof (cdr fi1_value)))
(princ "功率因数:")
(princ fi1_value)
(setq i (/ (* k1_value p1_value 1000) 220 fi1_value))
;将读取到的功率、需要系数、功率因数传递给计算公式,计算电流,并把结果赋值给变量i
(setq b (rtos i 2 2)) ;将数据结果由实数转换成字符串,且设置为两个精度,即小数点后两位
(setq a (getpoint "\n屏幕单击插入点")) ;指定插入点
(entmake (list '(0 . "text") ;建立文字图元属性列表,文字,插入点,内容,字高
(cons 10 a)
(cons 11 a)
(cons 1 b)
'(40 . 350)
)
)
(princ "\n单相计算电流(A)是:") ;命令行输出文字
(princ i) ;输出计算电流值i
(prin1)
)
Lisp学习是一步步来的,解决一个问题,然后解决下一个问题,等所有问题都解决了,答案也就出来了。
(完)
CAD自学网公众号
微信扫一扫关注我,每天分享各种免费设计干货小技巧。

我的微信
育设学堂服务号
微信扫一扫关注我,各种设计实战全套视频教程在线学。

我的公众号
评论