编辑图层过滤器需要帮助
图层过滤器。lsp用于将图形中的所有对象分离到单独的层中图层细节:隐藏线到隐藏层,标注到标注层,文本到文本层
我需要为选定对象使用此lsp,因此请有人编辑选定对象的此lsp,而不是整个图形
提前感谢。。。。。。。。。
TIP1119-过滤层。LSP 一个很大的提示是,去查阅SSGET的帮助,特别是“X”或“W”或“CP”的使用,或者干脆忽略它。 兄弟,我尝试“w”和“cp”,但结果是参数错误太多
有什么方法可以解决这个错误吗?请指导我 比格尔指出的最后一个选择。只需删除“X”。
(setq SS2 (ssget "X" '((0 . "TEXT"))))
那么。。。
(setq SS2 (ssget'((0 . "TEXT")))) 从lisp来看,它必须完全重写,因为它对5种不同的实体类型和元素进行了5个不同的ssget“X”调用。您需要创建一个可以接受所有选项的选择集,然后使用cond函数测试每个选项并进行相应修改。 我删除了“x”,它只适用于ss1
ss2,ss3。。。。不工作
有任何选择,请引导我,兄弟。。。。 快速且经过轻微测试:
(defun C:ForceObjectLayer (/ OLAY ss ent EnTyp Element)
(setq ss (ssget "+.:E:S"))
; :EEverything in aperture
; :SForce single object selection only
; The "+." puts (ssget) into "point" mode. It helps the ":S"
; single-mode act just like (entsel) by avoiding implied
; selection windows.
(if ss
(progn
(setvar "CMDECHO" 0)
(setq OLAY (getvar "CLAYER"))
(command "layer" "m" "dime" "lt" "continuous" "" "c" "yellow" "" "")
(command "layer" "m" "text" "lt" "continuous" "" "c" "green" "" "")
(command "layer" "m" "center" "lt" "center" "" "c" "red" "" "")
(command "layer" "m" "hidden" "lt" "hidden" "" "c" "green" "" "")
(command "layer" "m" "phantom" "lt" "phantom" "" "c" "white" "" "")
(setq ent (ssname SS 0)
EnTyp (cdr (assoc 0 (entget ent)))
Element (cdr (assoc 6 (entget ent)))
)
(cond
((= EnTyp "DIMENSION")(command "change" ss "" "p" "c" "bylayer" "la" "dime" "lt" "bylayer" ""))
((= EnTyp "TEXT")(command "change" ss "" "p" "c" "bylayer" "la" "text" "lt" "bylayer" ""))
((= Element "CENTER")(command "change" ss "" "p" "c" "bylayer" "la" "center" ""))
((= Element "HIDDEN")(command "change" ss "" "p" "c" "bylayer" "la" "hidden" ""))
((= Element "PHANTOM")(command "change" ss "" "p" "c" "bylayer" "la" "phantom" ""))
(T(princ "\nObject was not Dimension or Text or Element type Center, Hidden, or Phantom."))
)
(command "layer" "s" OLAY "")
); progn
)
(princ)
); end ForceObjectLayer.lsp
谢谢你的回复。。。。。。
兄弟,我们必须通过这个lsp分别拾取每个对象。
通过单窗口选择,可以将包含的对象放在单独的层中。。。。 我再次尝试给出一个关于ssget如何工作的重要提示,其他人在上面已经详细阐述了,在其最低级别just do(setq ss(ssget)),然后由您决定如何选择,设置1乘1,所有的几个,交叉窗口等。它只会在当前空间中看起来。
Tombu希望你不介意重新安排一点,这样ss可以是1或更多。
(defun C:ForceObjectLayer (/ OLAY ss ent EnTyp Element)
(setq ss (ssget))
; (setq ss (ssget "+.:E:S"))
; :EEverything in aperture
; :SForce single object selection only
; The "+." puts (ssget) into "point" mode. It helps the ":S"
; single-mode act just like (entsel) by avoiding implied
; selection windows.
(if ss
(progn
(setvar "CMDECHO" 0)
(setq OLAY (getvar "CLAYER"))
(command "layer" "m" "dime" "lt" "continuous" "" "c" "yellow" "" "")
(command "layer" "m" "text" "lt" "continuous" "" "c" "green" "" "")
(command "layer" "m" "center" "lt" "center" "" "c" "red" "" "")
(command "layer" "m" "hidden" "lt" "hidden" "" "c" "green" "" "")
(command "layer" "m" "phantom" "lt" "phantom" "" "c" "white" "" "")
) ;progn
(repeat (setq x (sslength ss)) ; ss can be just 1 entity
(setq ent (ssname SS (setq x (- x 1)))
EnTyp (cdr (assoc 0 (entget ent)))
Element (cdr (assoc 6 (entget ent)))
)
(cond
((= EnTyp "DIMENSION")(command "change" ss "" "p" "c" "bylayer" "la" "dime" "lt" "bylayer" ""))
((= EnTyp "TEXT")(command "change" ss "" "p" "c" "bylayer" "la" "text" "lt" "bylayer" ""))
((= Element "CENTER")(command "change" ss "" "p" "c" "bylayer" "la" "center" ""))
((= Element "HIDDEN")(command "change" ss "" "p" "c" "bylayer" "la" "hidden" ""))
((= Element "PHANTOM")(command "change" ss "" "p" "c" "bylayer" "la" "phantom" ""))
(T(princ "\nObject was not Dimension or Text or Element type Center, Hidden, or Phantom."))
) ; cond
) ; repeat
(command "layer" "s" OLAY "")
(princ)
); end ForceObjectLayer.lsp
兄弟,检查它不工作。请参阅以下输出文件。。。。。。。。。。
页:
[1]
2