分享

今天不想加班——Autolisp编程入门案例

 三石_万卷书屋 2019-11-14

关于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导出的图层转换为自己的图层时,就可以减少重复性的改图层工作,将不加班的精神贯彻落实。 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多