本帖最后由 作者 于 2008-12-9 10:22:54 编辑
vlisp开始学习这3个多月来 每天都和 vlax-invoke-method vlax-get-property 之类的函数打交道比如获得当前图层的方法 (vla-get-name (vla-get-ActiveLayer (vla-get-ActiveDocument (vlax-get-acad-object)))) 看看vba的方法 ThisDrawing.ActiveLayer.Name 或者 Application.ActiveDocument.ActiveLayer.Name Lisp为什么不能这么简化呢? 下面是我实现vba函数的部分结果: 当前图层 命令: (vba "ActiveDocument.ActiveLayer.name") "0" 图块集合 命令: (vba "ActiveDocument.Blocks") #<VLA-OBJECT IAcadBlocks 05e686a4> 当前cad路径 命令: (vba "FullName") "C:\\Program Files\\AutoCAD 2006\\acad.exe" 当前字体样式 命令: (vba "ActiveDocument.ActiveTextStyle.name") "MR_ROMANS" 对于集合的处理和带参数的vlax-invoke方法处理比较麻烦 如果能够完善这个函数开发效率相信大大增加 返回值是Lisp可以识别的对象和vla-eval调用VBA绝对不同 我打算以后直接copy VBA代码就行了 或者说是写一个真正的VBA语句的lisp解释函数还差不多吧 因为VBA语句里面还有多种嵌套模式 我目前没有完全解决 就不拿代码献丑了 只把思路放下,大家来实现完善吧 -------------------------------------------- 命令: (setq layers (vba "activedocument.layers")) #<VLA-OBJECT IAcadLayers2 0266a7a4> 命令: (setq newlay (vba "layers.add(\"234\")")) #<VLA-OBJECT IAcadLayer2 026b3844> 命令: (vba "newlay.color=6") nil 命令: (setq lay(vba "activedocument.layers.add(\"111\")")) #<VLA-OBJECT IAcadLayer2 026b4954> 命令: (vba "lay.color=3") nil
命令: (vba "activedocument.layers.item(\"111\").color=1") nil
|