乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 7|回复: 7

[编程交流] 思维方式

[复制链接]

13

主题

36

帖子

23

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-5 19:49:35 | 显示全部楼层 |阅读模式
你好
 
我想防止绘制图层,我找到了几种方法,但哪种方法最好?
 
 
 
 
1.
  1. (command "_.-layer" "p" "n" "LAYERNAME" "")
2。
  1. (defun PlotLayer2 (layerName bool / en output)
  2. (if (setq en (tblobjname "LAYER" layerName))
  3. (progn
  4.   (entmod (subst (cons 290 (if bool 1 0)) (assoc 290 (entget en)) (entget en)))
  5.   (setq output T)
  6. )
  7. )
  8. output
  9. )
3。
我知道它在这个例子中没有起到很大作用,但理论上哪种编程技术最好?
是否需要释放PlotLayer3中的对象?
 
提前感谢!
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 20:00:41 | 显示全部楼层
处理Vanilla AutoLISP要比命令调用和Visual Lisp方法快得多。
 
看看我重写代码的方式。
 
  1. (defun PlotLayer2 (layerName bool / en )
  2. (if (setq en (tblobjname "LAYER" layerName ))
  3.   (entmod (subst (cons 290 (if bool 1 0)) (assoc 290 (entget en)) (entget en)))
  4. )
  5. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 20:11:27 | 显示全部楼层
 
小心你的和表达式-注意,如果“bool”参数为nil,该函数将不会对层进行任何修改。
 
也许以下几点就足够了:
  1. 4
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 20:18:13 | 显示全部楼层
 
这已经讨论了几年了-普遍的共识是,AutoCAD将自动释放从AutoCAD应用程序对象派生的ActiveX对象;AutoCAD对象模型之外的对象(例如,从Excel应用程序对象或某些其他界面派生的ActiveX对象)必须使用vlax release对象从内存中“手动”释放。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 20:27:40 | 显示全部楼层
 
正确,我更新了代码。
 
非常感谢。
回复

使用道具 举报

13

主题

36

帖子

23

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-5 20:36:19 | 显示全部楼层
 
我能看到你所做的一切就是删除了答案部分?!
在您的defun中,您将得到nil或entmod答案作为函数的答案,而不是T/nil。
我还看到你有一个恒定的layername,但我想这只是一个失误。
 
我试图找到Vanilla AutoLISP和Visual Lisp的定义。
我是否正确理解这一点:
Vanilla AutoLISP=处理实体的函数(代码类似于原始帖子中的nr 2)?
Visual Lisp=处理vla对象(vla、vlax等)的函数?
 
那么,这是一般规则吗
如果你可以用enities(如entmod等)做你想做的事情,那么使用vla对象来做不是一个好主意?
回复

使用道具 举报

13

主题

36

帖子

23

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-5 20:48:49 | 显示全部楼层
 
 
这也是我的经历。
如果不使用vlax release object释放对象,则在关闭AutoCAD之前,Excel和其他外部对象不会被释放。
更难确定内部对象是否真的被释放。
 
 
李,谢谢你抽出时间。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 20:52:54 | 显示全部楼层
有一种说法是关于劈头发,如果你用命令做一行,你真的会进入微秒级。这里重要的是我的意见是vlax版本。如果你玩10000个物体,速度开始缓慢下降。然后方法真的开始走到前面,就我而言,我已经开始使用更多的Vl get&puts,因为我不必担心记住dxf代码,而是使用变量名,知道我想要更改什么。正如已经指出的那样,使用entmod要快得多。我能检测到速度的差异吗?您需要查看任务并做出决策,将lisp与进行比较。net的代码行只会增加,但你是否可以通过数千个对象提高速度。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-12 13:27 , Processed in 1.605512 second(s), 68 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表