乐筑天下

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

[编程交流] “x”上的反向选择集

[复制链接]

37

主题

264

帖子

236

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-5 17:35:37 | 显示全部楼层 |阅读模式
大家好,
是我,又回来了。。
 
 
有人能解释一下这个选择是怎么起作用的吗?
李有一些很好的解释,但这一个它找不到
 
(setq ss1(ssget“x”'((60.1)));查找任何不可见的对象
 
 
其想法是制作一个函数来扭转显示的不可见/可见对象。。。
 
我非常感谢你
 
http://www.lee-mac.com/selsetprocessing.html
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:40:04 | 显示全部楼层
嗨,就我个人而言,我会这样做:
  1. (if
  2. (and
  3.         (setq SS-invis (ssget "_X" (list (cons 60 1))))
  4.         (setq SS-vis (ssget "_X" (list (cons 60 0))))
  5. )
  6. (initget 1 "visible invisible")
  7. (progn
  8.         (setq ans (getkword "\nWhich selection to grip [visible/invisible] ?"))
  9.         (cond
  10.                 ((= ans "visible")
  11.                         (sssetfirst nil SS-vis)
  12.                 )
  13.                 ((= ans "invisible")
  14.                         (sssetfirst nil SS-invis)
  15.                 )
  16.         )       
  17. )
  18. )
回复

使用道具 举报

37

主题

264

帖子

236

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-5 17:44:03 | 显示全部楼层
谢谢你,Grrr先生。
这似乎是一个非常符合逻辑的句子。
尝试直接插入,但正如预期的那样,它无法立即插入
如何将ss INVI/ss vis设置为代码中的ss1选择集?
 
这个想法是你有两个状态。
不可见的选择集和可见的选择集。
如果我有一个例程,它会反转这些状态
我可以用它做一些漂亮的3D建模…;-)
 
 
(很抱歉我的lisp技能不是很好,我非常感谢任何帮助我获得一些好代码的人。)
 
 
我似乎有代码作为一部分,但我不能组装这些非常好。
因为我是一个“普鲁士”…;-)
 
 
  1. ..
  2. ..
  3. (your advice for the if)
  4. ..
  5. ..
  6. (if ss1
  7.    (progn
  8.      (setq counter 0)
  9.      (while (<= counter (- (sslength ss1) 1))
  10.        (setq en (ssname ss1 counter))
  11.        (setq look_for en)
  12.        (setq LOOK_FOR_DXF (entget LOOK_FOR))
  13.        (setq LOOK_FOR_LAYER (cdr (assoc 8 LOOK_FOR_DXF)))
  14.        (setq LAYER_LOCK_STATUS
  15.               (CDR
  16.                 (ASSOC 70
  17.                        (tblsearch "LAYER" LOOK_FOR_LAYER)
  18.                 )
  19.               )
  20.        )
  21.        (If (= LAYER_LOCK_STATUS 4)
  22.          (progn
  23.            (command "layer" "unlock" LOOK_FOR_LAYER "")
  24.          ) ; End progn
  25.        )
  26.        (setq LOOK_FOR_DXF
  27.               (subst (cons 60 0)
  28.                      (assoc 60 LOOK_FOR_DXF)
  29.                      LOOK_FOR_DXF
  30.               )
  31.        )
  32.        (entmod LOOK_FOR_DXF)
  33.        (If (= LAYER_LOCK_STATUS 4)
  34.          (progn
  35.            (command "layer" "lock" LOOK_FOR_LAYER "")
  36.          ) ; End progn
  37.        )
  38.        (setq counter (+ counter 1))
  39.      ) ; End of while
  40.    ) ; End progn
  41. ) ; End if   
  42. (command "redrawall")
  43. (command "undo" "end")
  44. (princ)
  45. (princ)
  46. ) ; End defun,
  47. ; ..this code makes it visible..
  48. (PRINC)

顺便说一句,我没有锁定选定对象的层。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:46:55 | 显示全部楼层
呜呜。。。这太酷了!!!多棒的作品啊!。将在3D建模期间受益。非常感谢你的努力。
反函数肯定有效!!就像第二个可用的模型空间
如果您喜欢Revit,请使用Revit中的灯泡功能。
 
 
 
 
https://knowledge.autodesk.com/support/revit-lt/learn-explore/caas/CloudHelp/cloudhelp/2015/ENU/RevitLT-DocumentPresent/files/GUID-B61C4920-0F8D-4243-9AD5-C75EC5BF0C53-htm.html
回复

使用道具 举报

37

主题

264

帖子

236

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-5 17:49:14 | 显示全部楼层
您可以使用以下两个函数来缩短上述代码和函数:
 
  1. (setq ss1 (ssget)) ; Select objects
  2. (if ss1 ; If user has selected object(s) then
  3.    (progn ; start this progn
  4.      (setq counter 0) ; set-up a counter starting at 0
  5.      (while (<= counter (- (sslength ss1) 1))
  6. ; While the counter is less than the total number of blocks in the SS1 selection set plus 1
  7.        (setq en (ssname ss1 counter))
  8. ; find the entity name of the entity at counter number ?
  9.        (setq look_FOR en) ; Set Look_FOR to the same as en
  10.        (setq LOOK_FOR_DXF (entget LOOK_FOR))
  11. ; Get the DXF list from the LOOK_For
  12.        (setq LOOK_FOR_LAYER (cdr (assoc 8 LOOK_FOR_DXF)))
  13. ; Get the Layer information out of the DXF list of the entity
  14.        (setq LAYER_LOCK_STATUS
  15. ; Find the layer status for the entities layer
  16.               (CDR
  17.                 (ASSOC 70
  18.                        (tblsearch "LAYER" LOOK_FOR_LAYER)
  19.                 )
  20.               )
  21.        )
  22.        (If (= LAYER_LOCK_STATUS 4)
  23. ; If the entities layer is locked then
  24.          (progn ; do the following Progn
  25.            (command "layer" "unlock" LOOK_FOR_LAYER "")
  26. ; Unlock the entities Layer
  27.          ) ; End progn
  28.        )
  29.        (setq LOOK_FOR_DXF
  30.               (subst (cons 60 1)
  31.                      (assoc 60 LOOK_FOR_DXF)
  32.                      LOOK_FOR_DXF
  33.               )
  34.        )
  35.        (setq tocon (cons 60 1))
  36.        (setq ToModify (append LOOK_FOR_DXF (list tocon)))
  37.        (entmod ToModify)
  38.        (If (= LAYER_LOCK_STATUS 4)
  39.          (progn
  40.            (command "layer" "lock" LOOK_FOR_LAYER "")
  41. ; Lock the LOOK_FOR_LAYER
  42.          ) ; End progn
  43.        )
  44.        (setq counter (+ counter 1))
  45. ; add one to the counter for next item to process
  46.      ) ; End of while
  47.    ) ; End progn
  48. ) ; End if
  49. (command "undo" "end")
  50. (princ)
  51. ) ; End of defun

要测试上述功能,请执行以下操作:
  1. ; test-isolate
  2. ; test-hide
  3. ; test-all-visible
  4. ; test-inverse
  5. ;isos
  6. (defun C:test-isolate ( / SSL SSX )
  7. (vl-load-com)
  8. (setq acadobject (vlax-get-Acad-Object))
  9. (setq acdoc (vla-get-activedocument acadobject))
  10. (if
  11.         (and
  12.                 (princ "\nSelect objects to isolate: ")
  13.                 (setq SSL (ssget "_:L"))
  14.                 (setq SSX (ssget "_X" ))
  15.         );and
  16.         (progn
  17.                 (PutEverythingInvisible SSX)
  18.                 (PutEverythingVisible SSL)
  19.                 (vla-Regen acdoc :vlax-true)
  20.         );progn
  21. )
  22. (princ)
  23. );defun       
  24. ; ozbs
  25. (defun C:test-hide ( / SSL )
  26. (vl-load-com)
  27. (setq acadobject (vlax-get-Acad-Object))
  28. (setq acdoc (vla-get-activedocument acadobject))
  29. (if
  30.         (and
  31.                 (princ "\nSelect objects to hide: ")
  32.                 (setq SSL (ssget "_:L"))
  33.         );and
  34.         (progn
  35.                 (PutEverythingInvisible SSL)
  36.                 (vla-Regen acdoc :vlax-true)
  37.         );progn
  38. )
  39. (princ)
  40. );defun       
  41. ;zb
  42. (defun C:test-all-visible ( / SSL SSX )
  43. (vl-load-com)
  44. (setq acadobject (vlax-get-Acad-Object))
  45. (setq acdoc (vla-get-activedocument acadobject))
  46. (if
  47.         (and
  48.                 (princ "\nSetting everything to visible! ")
  49.                 (setq SSX (ssget "_X" ))
  50.         );and
  51.         (progn
  52.                 (PutEverythingVisible SSX)
  53.                 (vla-Regen acdoc :vlax-true)
  54.         );progn
  55. )
  56. (princ)
  57. );defun       
  58. (defun C:test-inverse ( / SSL SSX )
  59. (vl-load-com)
  60. (setq acadobject (vlax-get-Acad-Object))
  61. (setq acdoc (vla-get-activedocument acadobject))
  62. (if
  63.         (and
  64.                 (princ "\nInversing the visibility! ")
  65.                 (setq SSX (ssget "_X" ))
  66.         );and
  67.         (progn
  68.                 (ReverseVisibility SSX)
  69.                 (vla-Regen acdoc :vlax-true)
  70.         );progn
  71. )
  72. (princ)
  73. );defun       
  74. (defun PutEverythingInvisible ( SS / ent enx vla-obj )
  75. (repeat (setq i (sslength SS))
  76.         (setq ent (ssname SS (setq i (1- i))))
  77.         (setq enx (entget ent))
  78.         (setq vla-obj (vlax-ename->vla-object ent))
  79.        
  80.         (if
  81.                 (and (vlax-property-available-p vla-obj "Visible") (= (vlax-get-property vla-obj 'Visible) :vlax-true))
  82.                 (vla-put-Visible vla-obj :vlax-false)
  83.         )
  84. )
  85. )
  86. (defun PutEverythingVisible ( SS / ent enx vla-obj )
  87. (repeat (setq i (sslength SS))
  88.         (setq ent (ssname SS (setq i (1- i))))
  89.         (setq enx (entget ent))
  90.         (setq vla-obj (vlax-ename->vla-object ent))
  91.        
  92.         (if
  93.                 (and (vlax-property-available-p vla-obj "Visible") (= (vlax-get-property vla-obj 'Visible) :vlax-false))
  94.                 (vla-put-Visible vla-obj :vlax-true)
  95.         )
  96. )
  97. )
  98. (defun ReverseVisibility ( SS / ent enx vla-obj )
  99. (repeat (setq i (sslength SS))
  100.         (setq ent (ssname SS (setq i (1- i))))
  101.         (setq enx (entget ent))
  102.         (setq vla-obj (vlax-ename->vla-object ent))
  103.        
  104.         (cond
  105.                 ((and (vlax-property-available-p vla-obj "Visible") (= (vlax-get-property vla-obj 'Visible) :vlax-false))
  106.                         (vla-put-Visible vla-obj :vlax-true)
  107.                 )
  108.                 ((and (vlax-property-available-p vla-obj "Visible") (= (vlax-get-property vla-obj 'Visible) :vlax-true))
  109.                         (vla-put-Visible vla-obj :vlax-false)
  110.                 )
  111.         )
  112. )
  113. )

 
以及反转对象的可见性:
  1. (defun PutEverythingInvisible ( ss vs / i k)
  2. (setq k (if vs 1 0))
  3. (repeat (setq i (sslength ss))
  4.    (entmod (append (entget (ssname ss (setq i (1- i)))) (list (cons 60 k))))
  5.    )
  6. )
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:52:03 | 显示全部楼层
谢谢你的建议Tharwat!
不幸的是,我不像你那样是列表处理大师,更像是你和李的学生
我看到您的示例回到了纯lisp,作为OP的原始代码,但我觉得使用VLA更舒服。
回复

使用道具 举报

37

主题

264

帖子

236

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-5 17:57:02 | 显示全部楼层
这里有一个简短的演示如何使用它。
感觉就像是第二个模型空间。
我使用了一些荷兰语命令快捷方式:
 
 
-rew:回放/反转显示=>测试反转
-ozbs:这个模型视图是无形的。。它的优点是,在反转它=>测试隐藏后,它将变得可见
-isos:隔离对象选择=>测试隔离
 
 
很高兴为AutoCAD comm发布此消息。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 17:58:30 | 显示全部楼层
谢谢你,Grrr。
 
就我个人而言,除非我被迫使用VLisp函数,否则我不会使用VLisp函数,否则纯lisp速度更快,可以与旧版本的AutoCAD一起使用,而VLisp则不能。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 18:03:23 | 显示全部楼层
你很好,哈勒姆!
在我做的每一个代码的技巧背后都有塔瓦和李·麦克,所以也许可以加上他们的名字。很高兴这有帮助。
回复

使用道具 举报

37

主题

264

帖子

236

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-5 18:05:51 | 显示全部楼层
好啊我是跟随者;-)将监视您提供的代码,查看它对某些对象定义的行为是否奇怪,以及速度性能。
我真的不在乎是vla还是lisp。如果我以后想更多地使用Bricscad,也许可以把它转换成lisp。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 03:14 , Processed in 0.551503 second(s), 72 queries .

© 2020-2025 乐筑天下

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