“x”上的反向选择集
大家好,是我,又回来了。。
有人能解释一下这个选择是怎么起作用的吗?
李有一些很好的解释,但这一个它找不到
(setq ss1(ssget“x”'((60.1)));查找任何不可见的对象
其想法是制作一个函数来扭转显示的不可见/可见对象。。。
我非常感谢你
http://www.lee-mac.com/selsetprocessing.html 嗨,就我个人而言,我会这样做:
(if
(and
(setq SS-invis (ssget "_X" (list (cons 60 1))))
(setq SS-vis (ssget "_X" (list (cons 60 0))))
)
(initget 1 "visible invisible")
(progn
(setq ans (getkword "\nWhich selection to grip ?"))
(cond
((= ans "visible")
(sssetfirst nil SS-vis)
)
((= ans "invisible")
(sssetfirst nil SS-invis)
)
)
)
) 谢谢你,Grrr先生。
这似乎是一个非常符合逻辑的句子。
尝试直接插入,但正如预期的那样,它无法立即插入
如何将ss INVI/ss vis设置为代码中的ss1选择集?
这个想法是你有两个状态。
不可见的选择集和可见的选择集。
如果我有一个例程,它会反转这些状态
我可以用它做一些漂亮的3D建模…;-)
(很抱歉我的lisp技能不是很好,我非常感谢任何帮助我获得一些好代码的人。)
我似乎有代码作为一部分,但我不能组装这些非常好。
因为我是一个“普鲁士”…;-)
..
..
(your advice for the if)
..
..
(if ss1
(progn
(setq counter 0)
(while (<= counter (- (sslength ss1) 1))
(setq en (ssname ss1 counter))
(setq look_for en)
(setq LOOK_FOR_DXF (entget LOOK_FOR))
(setq LOOK_FOR_LAYER (cdr (assoc 8 LOOK_FOR_DXF)))
(setq LAYER_LOCK_STATUS
(CDR
(ASSOC 70
(tblsearch "LAYER" LOOK_FOR_LAYER)
)
)
)
(If (= LAYER_LOCK_STATUS 4)
(progn
(command "layer" "unlock" LOOK_FOR_LAYER "")
) ; End progn
)
(setq LOOK_FOR_DXF
(subst (cons 60 0)
(assoc 60 LOOK_FOR_DXF)
LOOK_FOR_DXF
)
)
(entmod LOOK_FOR_DXF)
(If (= LAYER_LOCK_STATUS 4)
(progn
(command "layer" "lock" LOOK_FOR_LAYER "")
) ; End progn
)
(setq counter (+ counter 1))
) ; End of while
) ; End progn
) ; End if
(command "redrawall")
(command "undo" "end")
(princ)
(princ)
) ; End defun,
; ..this code makes it visible..
(PRINC)
顺便说一句,我没有锁定选定对象的层。 呜呜。。。这太酷了!!!多棒的作品啊!。将在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 您可以使用以下两个函数来缩短上述代码和函数:
(setq ss1 (ssget)) ; Select objects
(if ss1 ; If user has selected object(s) then
(progn ; start this progn
(setq counter 0) ; set-up a counter starting at 0
(while (<= counter (- (sslength ss1) 1))
; While the counter is less than the total number of blocks in the SS1 selection set plus 1
(setq en (ssname ss1 counter))
; find the entity name of the entity at counter number ?
(setq look_FOR en) ; Set Look_FOR to the same as en
(setq LOOK_FOR_DXF (entget LOOK_FOR))
; Get the DXF list from the LOOK_For
(setq LOOK_FOR_LAYER (cdr (assoc 8 LOOK_FOR_DXF)))
; Get the Layer information out of the DXF list of the entity
(setq LAYER_LOCK_STATUS
; Find the layer status for the entities layer
(CDR
(ASSOC 70
(tblsearch "LAYER" LOOK_FOR_LAYER)
)
)
)
(If (= LAYER_LOCK_STATUS 4)
; If the entities layer is locked then
(progn ; do the following Progn
(command "layer" "unlock" LOOK_FOR_LAYER "")
; Unlock the entities Layer
) ; End progn
)
(setq LOOK_FOR_DXF
(subst (cons 60 1)
(assoc 60 LOOK_FOR_DXF)
LOOK_FOR_DXF
)
)
(setq tocon (cons 60 1))
(setq ToModify (append LOOK_FOR_DXF (list tocon)))
(entmod ToModify)
(If (= LAYER_LOCK_STATUS 4)
(progn
(command "layer" "lock" LOOK_FOR_LAYER "")
; Lock the LOOK_FOR_LAYER
) ; End progn
)
(setq counter (+ counter 1))
; add one to the counter for next item to process
) ; End of while
) ; End progn
) ; End if
(command "undo" "end")
(princ)
) ; End of defun
要测试上述功能,请执行以下操作:
; test-isolate
; test-hide
; test-all-visible
; test-inverse
;isos
(defun C:test-isolate ( / SSL SSX )
(vl-load-com)
(setq acadobject (vlax-get-Acad-Object))
(setq acdoc (vla-get-activedocument acadobject))
(if
(and
(princ "\nSelect objects to isolate: ")
(setq SSL (ssget "_:L"))
(setq SSX (ssget "_X" ))
);and
(progn
(PutEverythingInvisible SSX)
(PutEverythingVisible SSL)
(vla-Regen acdoc :vlax-true)
);progn
)
(princ)
);defun
; ozbs
(defun C:test-hide ( / SSL )
(vl-load-com)
(setq acadobject (vlax-get-Acad-Object))
(setq acdoc (vla-get-activedocument acadobject))
(if
(and
(princ "\nSelect objects to hide: ")
(setq SSL (ssget "_:L"))
);and
(progn
(PutEverythingInvisible SSL)
(vla-Regen acdoc :vlax-true)
);progn
)
(princ)
);defun
;zb
(defun C:test-all-visible ( / SSL SSX )
(vl-load-com)
(setq acadobject (vlax-get-Acad-Object))
(setq acdoc (vla-get-activedocument acadobject))
(if
(and
(princ "\nSetting everything to visible! ")
(setq SSX (ssget "_X" ))
);and
(progn
(PutEverythingVisible SSX)
(vla-Regen acdoc :vlax-true)
);progn
)
(princ)
);defun
(defun C:test-inverse ( / SSL SSX )
(vl-load-com)
(setq acadobject (vlax-get-Acad-Object))
(setq acdoc (vla-get-activedocument acadobject))
(if
(and
(princ "\nInversing the visibility! ")
(setq SSX (ssget "_X" ))
);and
(progn
(ReverseVisibility SSX)
(vla-Regen acdoc :vlax-true)
);progn
)
(princ)
);defun
(defun PutEverythingInvisible ( SS / ent enx vla-obj )
(repeat (setq i (sslength SS))
(setq ent (ssname SS (setq i (1- i))))
(setq enx (entget ent))
(setq vla-obj (vlax-ename->vla-object ent))
(if
(and (vlax-property-available-p vla-obj "Visible") (= (vlax-get-property vla-obj 'Visible) :vlax-true))
(vla-put-Visible vla-obj :vlax-false)
)
)
)
(defun PutEverythingVisible ( SS / ent enx vla-obj )
(repeat (setq i (sslength SS))
(setq ent (ssname SS (setq i (1- i))))
(setq enx (entget ent))
(setq vla-obj (vlax-ename->vla-object ent))
(if
(and (vlax-property-available-p vla-obj "Visible") (= (vlax-get-property vla-obj 'Visible) :vlax-false))
(vla-put-Visible vla-obj :vlax-true)
)
)
)
(defun ReverseVisibility ( SS / ent enx vla-obj )
(repeat (setq i (sslength SS))
(setq ent (ssname SS (setq i (1- i))))
(setq enx (entget ent))
(setq vla-obj (vlax-ename->vla-object ent))
(cond
((and (vlax-property-available-p vla-obj "Visible") (= (vlax-get-property vla-obj 'Visible) :vlax-false))
(vla-put-Visible vla-obj :vlax-true)
)
((and (vlax-property-available-p vla-obj "Visible") (= (vlax-get-property vla-obj 'Visible) :vlax-true))
(vla-put-Visible vla-obj :vlax-false)
)
)
)
)
以及反转对象的可见性:
(defun PutEverythingInvisible ( ss vs / i k)
(setq k (if vs 1 0))
(repeat (setq i (sslength ss))
(entmod (append (entget (ssname ss (setq i (1- i)))) (list (cons 60 k))))
)
)
谢谢你的建议Tharwat!
不幸的是,我不像你那样是列表处理大师,更像是你和李的学生
我看到您的示例回到了纯lisp,作为OP的原始代码,但我觉得使用VLA更舒服。 这里有一个简短的演示如何使用它。
感觉就像是第二个模型空间。
我使用了一些荷兰语命令快捷方式:
-rew:回放/反转显示=>测试反转
-ozbs:这个模型视图是无形的。。它的优点是,在反转它=>测试隐藏后,它将变得可见
-isos:隔离对象选择=>测试隔离
很高兴为AutoCAD comm发布此消息。 谢谢你,Grrr。
就我个人而言,除非我被迫使用VLisp函数,否则我不会使用VLisp函数,否则纯lisp速度更快,可以与旧版本的AutoCAD一起使用,而VLisp则不能。 你很好,哈勒姆!
在我做的每一个代码的技巧背后都有塔瓦和李·麦克,所以也许可以加上他们的名字。很高兴这有帮助。 好啊我是跟随者;-)将监视您提供的代码,查看它对某些对象定义的行为是否奇怪,以及速度性能。
我真的不在乎是vla还是lisp。如果我以后想更多地使用Bricscad,也许可以把它转换成lisp。
页:
[1]
2