关于Autocad的lsp插件的魅力,设计师们应该已经在日常工作中体会到了,今天我们不仅要欣赏美,我们还要创造美。
Lsp插件是基于Autocad采用Autolisp语言进行二次开发的脚本,Autolisp属于解释性语言,用户编写的程序源代码直接由解释器解释并执行,在执行这种语言编写的程序之前不需要中间步骤,用户可以交互、独立于其他部分地试验或验证程序段或程序语句。
通俗点讲,Autolisp编程语言就是AutoCAD可以听懂的语言,与我们日常沟通的语言一样,编程语言也有自己的语法和词汇,编程就是用一门特定语言与计算机或软件进行交流。而autolisp一个显著的特点就是:表就是程序的本体,夸张的说就是Lisp中的一个列表—任何列表—都是一个准备运行的程序。啰啰嗦嗦这些,萌新对autolisp还是没什么概念,那接下来小编以一个LISP的小例子来展示LISP编程的一些入门操作。
自盘古开天辟地以来,模板图中不可见的梁线都是以虚线表示,但遇到洞口或板边界又是可见梁线,需以实线示意,这个简单呀:1、选择可见梁线;2、改变图层。既然这么简单,那我们就从简单的问题入手,看看如何在lisp中实现这个简单的步骤。还是一个中心思想:把我们的语言翻译成编程语言。
1:“这是我选择的梁线”
Vlisp能听懂的“选择”是函数:entsel;赋值是:setq,其后紧跟的是我小本本(变量名)。
那这句话翻译出来就是:
把这句话说给cad,在输入栏输入这句话发现输入栏提示:
鼠标光标变为选择状态
——AutoCAD听懂了!
这时点击就可以选择想要转变的线了。
而cad中图元都是有自己的名字,上一步的选择并没有说清楚这条线的样子(属性),所以要多说一句话,告诉我所选择的梁线的样子(属性):
我们掏出小本本(ss)记下来图元的名称和属性
对照cad里图层信息,可以找到这个梁线的图层信息储存在编号8的小括号里(列表)。
2、“换成我要的图层”
这一句虽然我们说出来跟上一句长度差不多,但是受限于Vlisp的“脑回路”(编程语言的语法与函数功能),这句话不能这么直接,需要委婉的告诉他,这句话需要拆分成下面三句话:
a.你看好了这是我想要更改的东西
(setq oldlayer (assoc 8 ss))
b.你看好了这是我想要改成的结果
(setq newlayer (cons 8 “new”))
c.你替换一下展示给我吧
(setq newen (subst newlayer oldlayer ss))
(entmod newen)
好了,话说完了,为了可以重复说这些话,加入一个while函数,那么上面的话再用Vlisp的defun函数就可以封装成cad中命令调用的lsp啦,格式如下所示,其中C:后面的内容就是在cad中的调用本lsp的命令。
加载lsp至cad,最终效果如下:
但是就就这么简单的一个功能却需要和autocad说这么多的话,交流过程太过曲折,那么可以换一种方式(类似于换一种语言)和autocad交流。通过调用vl-load-com函数来初始化ActiveX环境,这样就可以通过将图元转化成VLA对象,后续就可以采用ActiveX的方式与Autocad进行对话
注:查看VLA对象属性的函数名为(vlax-dump-object VLA-OBJECT)
这次真的的成为了两句话,殊途同归,测试一下效果:
这个简单的小lsp例子就说到这里,能转换一个图层就可以转换第二个、第三个……集成在一起就可以做一个批量转换图层的lsp,当我们需要将常用的某科、某M导出的图层转换为自己的图层时,就可以减少重复性的改图层工作,将不加班的精神贯彻落实。
扫码关注我们
猜你喜欢
“转自:非解构-公众号”上海结构设计圈仅限在上海从事结构设计的朋友们。