利⽤lisp进⾏AutoCAD⼆次开发(环境说明、⽂件读取、以及
表格创建与写值)
今天的这个例⼦是lisp计算机语⾔编程,说到这门计算机语⾔还是⼤学的时候接触的,不过那时候都是停留在了解的层⾯上,后⾯编写AutoCAD⼆次开发程序⼏乎是⽤的是C#。所以对lisp不熟,就别提关于lisp在AutoCAD⽅⾯的接⼝。⽽今天所以⼜捡起这么计算机语⾔,是出于两⽅⾯原因,⾸先在AutoCAD明经测绘GIS板块中有相当⼀部分代码是lisp编写的,这部分代码⾮常实⽤于测绘GIS⽇常⽣产。另外⼀个⽅⾯是,在AutoCAD论坛中,autoLisp版块⾮常活跃,这⾥常常汇聚着⼀些业界的⼤⽜,在这⾥开源了相当⼀部分代码。可以说,是⼀部分相当不错的资料。
使⽤lisp开发AutoCAD程序开发环境为AutoCAD⾃带的编辑器。具体界⾯如下图所⽰。
代码只要写在空⽩处,保存为.lsp后缀⽂件即可。下⾯来说⼀下,常⽤的调试键,F8为单步调试,为嵌套的⽅式,会层层的深⼊。⽽如果想⼀个⼀个表达式调试,只要shift+F8即可。⽽下⾯截图中按钮是对代码的执⾏,代码的检查,由于lisp以⾮常繁琐的链表⽅式,即括号的⽅式编写,所以使⽤这⼏个功能对代码的检查是⼗分有必要的。
类似于C#,JAVA计算机语⾔,我们在调试的时候需要对我们的变量值进⾏查看,在AutoCAD中可以使⽤如下图的监视窗⼝。在窗⼝中输⼊变量的值,可以查看程序运⾏中,变量值的变化。
⽽我们在开发中,往往需要对代码进⾏类似C#⼀样,将AutoCAD添加到进程中调试,在AutoCAD⾃带的编辑器中,我们只要使⽤激活AutoCAD即可。具体如下图所⽰。
好了,关于编写AutoCAD开发的lisp程序⽅⾯的环境,以及常⽤的快捷键就说明完,当然了,更多的相关的知识,⼤家可以查看⽹络的相关资料,这⾥就不做详细的说明。
今天的这个例⼦是利⽤AutoCAD对象,利⽤反射调⽤函数打开⽂件窗⼝,读取⽂件。然后读⽂件该⽬录下的dwg后缀的⽂件。再由AutoCAD⾥⾯创建表格,将⽂件名填写到表格⾥⾯,整个程序就作完⼯作。在这⾥例⼦,我们将会学到AutoCAD对象的链接,模型空间中添加表格,表格单元格的填写。就lisp语法⽽⾔,有对象的反射调⽤,循环的使⽤。可以说是学习AutoCAD在lisp开发不错的例⼦。具体的实现代码如下图所⽰。
(defun c:GET_FILES ( / sh folder folderobject result)
(vl-load-com)
(command "cmdecho" 0)
(setq sh (vla-getInterfaceObject (vlax-get-acad-object) "Shell.Application" ))
(setq folder (vlax-invoke-method sh 'BrowseForFolder 0 "" 0 ))
(vlax-release-object sh)
(setq folderobject (vlax-get-property folder 'Self))
(setq result (vlax-get-property FolderObject 'Path))
(setq Files_Folder (vl-directory-files result "*.dwg"))shell创建文件并写入内容
(setq acadObj (vlax-get-acad-object))
(setq doc (vla-get-ActiveDocument acadObj))
(setq pt (vlax-3d-point 0 0 0))
(setq modelSpace (vla-get-ModelSpace doc))
(setq MyTable (vla-Addtable modelSpace pt (+ (length Files_Folder) 2) 2 10 100)) (vla-ZoomExtents acadObj)
(vla-setText MyTable 0 0 "图形⽂件列表")
(vla-setText MyTable 1 0 "序号")
(vla-setText MyTable 1 1 "⽂件名")
(if (/= (length Files_Folder) 0)
(repeat (setq N (length Files_Folder))
(setq e (nth (setq N (- N 1)) Files_Folder))
(setq fsl (strlen e))
(Setq Fsl (- fsl 4))
(setq Fname (substr e 1 fsl))
(vla-setText MyTable (+ N 2) 0 (+ N 1))
(vla-setText MyTable (+ N 2) 1 Fname)
)
(princ "\n⽆ *.DWG 后缀的⽂件")
)
(command "cmdecho" 1)
(princ)
)
下⾯来看⼀下录制的gif效果。
更多内容,请关注
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论