思维方式
你好我想防止绘制图层,我找到了几种方法,但哪种方法最好?
1.
(command "_.-layer" "p" "n" "LAYERNAME" "")
2。
(defun PlotLayer2 (layerName bool / en output)
(if (setq en (tblobjname "LAYER" layerName))
(progn
(entmod (subst (cons 290 (if bool 1 0)) (assoc 290 (entget en)) (entget en)))
(setq output T)
)
)
output
)
3。
我知道它在这个例子中没有起到很大作用,但理论上哪种编程技术最好?
是否需要释放PlotLayer3中的对象?
提前感谢! 处理Vanilla AutoLISP要比命令调用和Visual Lisp方法快得多。
看看我重写代码的方式。
(defun PlotLayer2 (layerName bool / en )
(if (setq en (tblobjname "LAYER" layerName ))
(entmod (subst (cons 290 (if bool 1 0)) (assoc 290 (entget en)) (entget en)))
)
)
小心你的和表达式-注意,如果“bool”参数为nil,该函数将不会对层进行任何修改。
也许以下几点就足够了:
4
这已经讨论了几年了-普遍的共识是,AutoCAD将自动释放从AutoCAD应用程序对象派生的ActiveX对象;AutoCAD对象模型之外的对象(例如,从Excel应用程序对象或某些其他界面派生的ActiveX对象)必须使用vlax release对象从内存中“手动”释放。
正确,我更新了代码。
非常感谢。
我能看到你所做的一切就是删除了答案部分?!
在您的defun中,您将得到nil或entmod答案作为函数的答案,而不是T/nil。
我还看到你有一个恒定的layername,但我想这只是一个失误。
我试图找到Vanilla AutoLISP和Visual Lisp的定义。
我是否正确理解这一点:
Vanilla AutoLISP=处理实体的函数(代码类似于原始帖子中的nr 2)?
Visual Lisp=处理vla对象(vla、vlax等)的函数?
那么,这是一般规则吗
如果你可以用enities(如entmod等)做你想做的事情,那么使用vla对象来做不是一个好主意?
这也是我的经历。
如果不使用vlax release object释放对象,则在关闭AutoCAD之前,Excel和其他外部对象不会被释放。
更难确定内部对象是否真的被释放。
李,谢谢你抽出时间。 有一种说法是关于劈头发,如果你用命令做一行,你真的会进入微秒级。这里重要的是我的意见是vlax版本。如果你玩10000个物体,速度开始缓慢下降。然后方法真的开始走到前面,就我而言,我已经开始使用更多的Vl get&puts,因为我不必担心记住dxf代码,而是使用变量名,知道我想要更改什么。正如已经指出的那样,使用entmod要快得多。我能检测到速度的差异吗?您需要查看任务并做出决策,将lisp与进行比较。net的代码行只会增加,但你是否可以通过数千个对象提高速度。
页:
[1]