乐筑天下

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

[编程交流] 将对象添加到新选择中

[复制链接]

77

主题

298

帖子

232

银币

后起之秀

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

铜币
394
发表于 2022-7-6 06:32:25 | 显示全部楼层 |阅读模式
嘿伙计们,
 
我有一个我一直在做的程序……这是Carry帮我为ProSteel创建的另一个程序的修改版本。
 
常规背后的理念是,我将能够隐藏或显示具有特定修改类型的ProSteel对象。
 
例如,如果我想显示模型中所有有钻孔的元素,这个例程将允许我这样做。
 
我已经设法得到了这个例程的一个合理的工作版本——修改了Carry为另一个练习提供的代码。还有一些需要改进的地方。
 
我当前的代码是:
 
  1. (defun c:hxd  (/ ss num con ent3A ent3B acadapp shapeinfo HFCs1)
  2. (vl-load-com)
  3. ;--------------------------Read Data From Bolt--------------------------------
  4. (prompt "\nSelect ELEMENT:")(princ)
  5. (setq ss (ssget '((0 . "KS_PLATE,KS_SHAPE"))));8=Name Layer 0=ks_object
  6. (setq num (sslength ss));n° object
  7. (setq con 0)
  8. (repeat num  
  9. (setq ent3A (ssname ss con))
  10. (setq ent3B ent3A)
  11. (setq acadapp (vlax-get-acad-object))
  12. (setq shapeinfo (vla-getinterfaceobject acadapp "PSCOMWRAPPER.Ks_ComShapeInfo"))   
  13. (vlax-invoke-method shapeinfo 'setobject  (vlax-ename->vla-object ent3A))
  14. (vlax-invoke-method shapeinfo 'getinfo);ritrova le informazioni nel database
  15. (setq shapeinfo (vla-getinterfaceobject acadApp "PSCOMWRAPPER.Ks_ComShape"))
  16. (setq shapeinfo (vlax-ename->vla-object ent3B))   
  17. (setq HFCs1 (vlax-get-property shapeinfo 'HoleFieldCount))
  18. [b](if (= HFCs1 0)
  19. (command "Ps_Hide" ent3b "")
  20. )[/b]
  21. (vlax-release-object shapeinfo)   
  22. (setq shapeinfo nil)
  23. (setq acadApp nil)(princ)
  24. (setq con (1+ con))
  25. )
  26. )

 
虽然上面的这个例程确实执行了我需要的任务,但我想更改如何处理选择集以隐藏/显示。
 
目前,该代码将识别并隐藏所有没有孔修改的对象-逐个处理选择集。我不想使用这种方法,而是将每个已识别的元素添加到选择集,并一次将它们全部隐藏。我认为需要注意的代码区域以粗体突出显示。在我看来,这可以通过将每个对象添加到选择集来实现,但根据我的理解……我只能添加到已经存在的选择集。我对如何绕过这个障碍知之甚少。
 
所以,我只是想知道是否有人能帮我想出一个解决这个难题的办法。
 
任何帮助都将不胜感激。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 06:43:15 | 显示全部楼层
此添加将从传递给PS\u HIDE命令的所有项目中构建一个选择集;因为我不熟悉这个命令,所以无法进一步调整代码。
  1. ...
  2. (setq con 0)
  3. [color=magenta](setq ssetHidenItems (ssadd))[/color]
  4. (repeat num  
  5. ...
  6. (if (= HFCs1 0)
  7. [color=magenta] (progn[/color]
  8. [color=magenta]  (setq ssetHidenItems (ssadd ent3b ssetHidenItems))[/color]
  9. (command "Ps_Hide" ent3b "")
  10. [color=magenta] )[/color]
  11. )
  12. ...
回复

使用道具 举报

77

主题

298

帖子

232

银币

后起之秀

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

铜币
394
发表于 2022-7-6 06:50:38 | 显示全部楼层
好极了
 
非常感谢您抽出时间回复Mircea。我理解当例程包含一些ProSteel函数时,可能很难看到整个画面,但你做到了。
 
工作代码:
 
  1. (defun c:hxd  (/ ss num con ent3A ent3B acadapp shapeinfo HFCs1 ssetHidenItems)
  2. (vl-load-com)
  3. (prompt "\nSelect ELEMENTS:")(princ)
  4. (setq ss (ssget '((0 . "KS_PLATE,KS_SHAPE"))));8=Name Layer 0=ks_object
  5. (setq num (sslength ss));n° object
  6. (setq con 0)
  7. (setq ssetHidenItems (ssadd))
  8. (repeat num  
  9. (setq ent3A (ssname ss con)) ;       (entsel "\nSelect BOLT: "))
  10. (setq ent3B ent3A)
  11. (setq acadapp (vlax-get-acad-object))
  12. (setq shapeinfo (vla-getinterfaceobject acadapp "PSCOMWRAPPER.Ks_ComShapeInfo"))   
  13. (vlax-invoke-method shapeinfo 'setobject  (vlax-ename->vla-object ent3A))
  14. (vlax-invoke-method shapeinfo 'getinfo);ritrova le informazioni nel database
  15. (setq shapeinfo (vla-getinterfaceobject acadApp "PSCOMWRAPPER.Ks_ComShape"))
  16. (setq shapeinfo (vlax-ename->vla-object ent3B))   
  17. (setq HFCs1 (vlax-get-property shapeinfo 'HoleFieldCount))  ;HoleFieldCountshape1
  18. (if (= HFCs1 0)
  19. (progn
  20. (setq ssetHidenItems (ssadd ent3b ssetHidenItems))
  21. )
  22. )
  23. (vlax-release-object shapeinfo)   
  24. (setq shapeinfo nil)
  25. (setq acadApp nil)(princ)
  26. (setq con (1+ con))
  27. )
  28. (command "Ps_Hide" ssetHidenItems "")
  29. )

 
工作出色。
 
再次感谢。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 07:00:54 | 显示全部楼层
很高兴我能帮上忙!不客气!
 
一个观察结果是,由于您将一条语句移出了IF评估,因此不再需要PROGN:
  1. (if (= HFCs1 0)
  2. [color=red] [s](progn[/s]
  3. [/color]  (setq ssetHidenItems (ssadd ent3b ssetHidenItems))
  4. [color=red] [s])[/s]
  5. [/color])
回复

使用道具 举报

77

主题

298

帖子

232

银币

后起之秀

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

铜币
394
发表于 2022-7-6 07:10:10 | 显示全部楼层
别担心Mircea,
 
你同意移动(命令“Ps\u Hide”ssetHidenItems”)行是正确的做法吗?似乎我把它留在了IF评估中。。。元素仍然被一一隐藏。所以通过将这条线移出IF评估。。。它只允许PS_HIDE命令对“ssetHidenItems”操作一次。
 
再次感谢您的帮助。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 07:18:47 | 显示全部楼层
如果PS\u HIDE命令接受选择集作为输入,则最好将其移到循环之外。在内部,它将在每次解析时触发,因此可能很耗时。
它一次处理一个项目的原始代码;如果您将其更改为:
  1. (if (= HFCs1 0)
  2. (progn
  3. (setq ssetHidenItems (ssadd ent3b ssetHidenItems))
  4. (command "Ps_Hide" ssetHidenItems "")
  5. )
  6. )

然后,屏幕上的效果类似,但评估时间可能会增加,因为它必须在一次调用中处理更多项目(每个周期多处理一个项目),甚至有些项目已经隐藏。
回复

使用道具 举报

77

主题

298

帖子

232

银币

后起之秀

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

铜币
394
发表于 2022-7-6 07:32:05 | 显示全部楼层
理解。谢谢你花时间解释。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 07:38:03 | 显示全部楼层
这是我的荣幸;很高兴我能帮忙!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 14:59 , Processed in 0.440478 second(s), 68 queries .

© 2020-2025 乐筑天下

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