怎么用lisp实现计算结果插入到屏幕中

周站长 图文教程评论2,5541字数 1920阅读6分24秒阅读模式
CAD自学网会员

已经完成的计算,怎么将计算结果插入到屏幕中。

例:电气专业中的单相负荷计算电流 

之前已经编辑出电流计算的程序,结果是只能在命令行显示,怎么将结果通过鼠标直接插入到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)
           )
)

动图演示:

怎么用lisp实现计算结果插入到屏幕中

完整代码如下:

(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自学网公众号
微信扫一扫关注我,每天分享各种免费设计干货小技巧。
weinxin
我的微信
育设学堂服务号
微信扫一扫关注我,各种设计实战全套视频教程在线学。
weinxin
我的公众号
育设学堂建筑学院
周站长
  • 本文由 发表于 2022年1月18日 16:47:42
  • 转载请务必保留本文链接:https://www.cadzxw.com/47592.html
育设学堂CAD课程
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定