我们在写vlisp的时候 往往要写很多代码来实现一个方法或者得到一个属性 例如:新建立一个名为"new"的图层 (Vlax-Invoke-Method (Vlax-Get (Vlax-Get (Vlax-Get-Acad-Object) 'ActiveDocument) 'Layers) 'Add "new" ) 其实若定义函数则可以简化 (setq App (Vlax-Get-Acad-Object)) (setq Adoc (Vlax-Get App 'ActiveDocument)) (setq Layers (Vlax-Get Adoc 'Layers)) (defun AddLayer (LayerName) (Vlax-Invoke-Method Layers 'Add LayerName) ) (AddLayer "new");我只想要这句话 这样我就可以用(AddLayer "new")建立图层了 但是我更希望这个AddLayer函数是已经存在CAD里面的: 若能定义全部的vlisp方法为函数 属性为变量 则开发起来就不再需要VLA- 函数了 直接就像普通的函数那样使用 vlisp立刻就简单多了吧 呵呵.... ---------------------------- 观众A: 这个也算是想法? 我们平时也是这样写的! 观众B: 先不说定义全部的vlisp要多大的工作量,一旦加载数千个变量和函数会影响程序效率的! 观众C: 而且有很多重名的属性和方法,定义这些变量和函数我平时写会冲突的. 观众D : (手里已经准备好了砖头...) ----------------------------- 慢! 我还没说完呢! 1 既然函数多,就找方法来简化,可以让程序自己分析完成函数定义(临时生成函数). 2 自己定义函数变量当然可以加前缀了,重复的函数也加特殊前缀区分(这个就自己看着办了) 3 不必加载所有的函数和变量,我需要什么就加载进来什么,这样不影响效率(类似C语言里面的#include) 程序简化如下: (include "O_APP") (include "O_ADOC") (include "O_Layers") (include "M_AddLayer") (M_AddLayer "new") 这样include函数将帮我自动分析后面的参数并自动生成加载下面几句话(其他的不加载) (setq O_App (Vlax-Get-Acad-Object)) (setq O_Adoc (Vlax-Get O_App 'ActiveDocument)) (setq O_Layers (Vlax-Get O_Adoc 'Layers)) (defun M_AddLayer (LayerName) (Vlax-Invoke-Method O_Layers 'Add LayerName) ) 如此对整个程序的效率就没有影响了 而我的新程序将直接得到3个变量和1个函数! 其实最终我的代码可以简化如下: (include "M_AddLayer") (M_AddLayer "new") 此2句代码即可自动实现完全等价于上面红色部分的代码(包括生成3个对象变量和一个函数) 这些都是完全可以实现的. |