利用lisp编写一个直线上插入图块的插件

周站长 图文教程评论3,9282字数 1294阅读4分18秒阅读模式
CAD自学网会员

虽然chatgpt可以帮助我们自动编写一些cad插件,但是由于结果反馈并不总是正确。所以,如果想要自己编写插件,且功能较为简单的。便可以学习一些基本知识。

编程语言最基础的须知,是函数的用法。你想实现什么功能,就去用什么函数。这就像是,你想要做加法,就要用加号一个道理。

想要编写直线上插入块的插件,就要知道cad中什么操作能实现。比较广为熟知的就是divide命令。其操作如下。

利用lisp编写一个直线上插入图块的插件 利用lisp编写一个直线上插入图块的插件

这个操作实现主要包括三个部分:1选择直线;2插入块的块名;3插入线段的数量,这个数量与块的数量相差为1。

所以,代码就是要实现以上三个操作,那边可以完成了。根据要求,编写代码如下:

利用lisp编写一个直线上插入图块的插件

(defun C:cc()
  ;选择直线,插入指定数量的块
  (princ "\n选择插入块的直线,并再选择完成后单击鼠标右键")
  (setq a (ssget))
  (setq b (cdr (assoc 2 (entget (car (entsel"\n选择要插入的块"))))))
  (setq c (getreal "\n输入插入块的数量并空格或回车:"))
  (setq d (+ c 1))
  (command "DIVIDE" a "B" b "Y" d )
(princ)
)

第一行:princ是个提示语,会输出到命令行。提示操作。

第二行:(setq a (ssget))实现的是选择直线操作。Ssget是选择集函数,即实现代码交互到图纸,选择图纸对象的函数。

第三行:(setq b (cdr (assoc 2 (entget (car (entsel"\n选择要插入的块"))))))实现的是选择插入的块,并提取块名操作。为了divide命令中的输入块名操作。

Entsel是选择块。

car是得到块在代码中的名字。

entget是获取块的整个图元列表,得到这个图元列表才能得到块在图纸中的名称。

Assoc是读取图元列表(2,“块名”),这个函数的意思是得到群码是2的图元列表。

cdr是为了得到“块名”,这个函数的意思是获取列表的第二个元素。

Setq是赋值函数,即将得到的“块名”,赋给b这个变量。

第四行:(setq c (getreal "\n输入插入块的数量:"))是命令行输入插入块的数量。

第五行:(setq d (+ c 1))是为了解决块的数量与分段数目的差值问题。由div命令可知,div输入的是分段数量,分段数量=块的数量+1,所以在程序中要解决,使得输入的块的数量,就是插入的块数量。

第六行:(command "DIVIDE" a "B" b "Y" d )就是运行divide命令的过程。Command就是运行cad的命令函数。

这行代码就是命令行输入div命令,选择直线(就是第二行把直线赋值给了a变量),选择插入块,输入块名(第三行代码把块名赋值给我b变量),是否对齐块对象yes,输入线段数目(第五行代码把数目赋值给了d变量)。即下图操作。

利用lisp编写一个直线上插入图块的插件

那么,加载插件,运行代码,详见如下动图演示。

利用lisp编写一个直线上插入图块的插件

以上,你会了吗?

千里之行始于日积月累。天才是需要天赋,是万里挑一的存在。芸芸众生才是常见。我们大都不是天生的大神,但可以一步一步靠近神。如果日积跬步没能到千里之外,但至少可以走到明天。只要肯走,明天终究要比今天要好上一天。

(完)

CAD自学网公众号
微信扫一扫关注我,每天分享各种免费设计干货小技巧。
weinxin
我的微信
育设学堂服务号
微信扫一扫关注我,各种设计实战全套视频教程在线学。
weinxin
我的公众号
育设学堂建筑学院
周站长
  • 本文由 发表于 2023年3月27日 23:12:15
  • 转载请务必保留本文链接:https://www.cadzxw.com/53145.html
育设学堂CAD课程
匿名

发表评论

匿名网友

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

确定