通过选择o创建层
大家好,我正在寻找一个lisp例程,通过选择一个对象来创建一个新层。想法是这样的:我在相应的层上有一系列对象,它们将成为整体设计“未来”扩展的一部分。因此,我想创建后缀为“-future”的独立层,以便可以相应地设置层属性(半色调等)。理想情况下,我希望它提供一个选项来选择对象,然后从该对象中获取层名称,并创建一个带有后缀的新层,然后将该对象放在该层上。这样我可以选择未来的对象,它将创建所有层并为我放置它们。任何帮助都将不胜感激。
当做 快速启动,如果有效,请告诉我:
(defun c:obtol( / layLst ss ssEnts echo)
(vl-load-com)
(setq echo (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq ss (ssget))
(if ss (setq ssEnts (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))))
(foreach forVar ssEnts
(if (member (strcat (cdr (assoc 8 (entget forVar))) " - FUTURE") (layer-list))
(vl-cmdf "chprop" forVar "" "LAYER" (strcat (cdr (assoc 8 (entget forVar))) " - FUTURE") "")
(vl-cmdf "-layer" "make" (strcat (cdr (assoc 8 (entget forVar))) " - FUTURE") ""
"chprop" forVar "" "LAYER" (strcat (cdr (assoc 8 (entget forVar))) " - FUTURE") "")
)
)
(setvar "cmdecho" echo)
(princ)
)
(defun layer-list( / layLst)
(vl-load-com)
(vlax-for vFor (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
(setq layLst (cons (vla-get-name vFor) layLst)))
)
*等等,我错过了什么。。给我一点时间重新做。 很好,谢谢。现在有一种方法可以在创建层时设置层的属性。也就是说,我想将颜色设置为252,线型设置为“隐藏”
再次感谢! 我没有过滤掉已经在“*-未来”层上的对象,所以它最终将它们放在了“*-未来-未来”层上。。我解决了这个问题。
这是带有图层特性集的更新代码,但是您需要确保加载了“隐藏”线型,否则我很确定它会出错。
编辑是的,我很清楚这是怎么回事。”
*编辑编辑*啊,不更改属性。。自我提醒:除非代码很棒,否则不要提交代码。
*编辑编辑*确定我的错误。。只要该层不存在,它就应该可以工作。。 嘿,只要它能用就行。我非常感谢!我的目标是创建两个按钮,一个用于打开未来,另一个用于关闭未来。这样,当它回到正在实现的未来的东西时,我会很容易地将它们切换回正常的层(没有“-future”后缀)。这可能更容易做到,因为已经创建了层,只需将其移动到另一层即可。例如,我有一个变压器,我想放在未来。所以我会用它来选择它,并将其移动到层“transformer future”。之后在这个项目中,我想把它移回“transformer”层。。。等
再次感谢!
编辑:正确,如果图层已存在,则不会更改它。这可能吗? 任何事情都有可能,这只是一个如何实现的问题。
(defun c:obtol( / layLst ss ssEnts echo)
(vl-load-com)
(setq echo (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq ss (ssget))
(if ss (setq ssEnts (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))))
(foreach forVar ssEnts
(if (not (wcmatch (cdr (assoc 8 (entget forVar))) "* - FUTURE"))
(if (member (strcat (cdr (assoc 8 (entget forVar))) " - FUTURE") (layer-list))
(vl-cmdf "-layer" "Ltype" "hidden" (strcat (cdr (assoc 8 (entget forVar))) " - FUTURE") ""
"-layer" "Color" "252" (strcat (cdr (assoc 8 (entget forVar))) " - FUTURE") ""
"chprop" forVar "" "LAYER" (strcat (cdr (assoc 8 (entget forVar))) " - FUTURE") "")
(vl-cmdf "-layer" "new" (strcat (cdr (assoc 8 (entget forVar))) " - FUTURE") ""
"-layer" "Ltype" "hidden" (strcat (cdr (assoc 8 (entget forVar))) " - FUTURE") ""
"-layer" "Color" "252" (strcat (cdr (assoc 8 (entget forVar))) " - FUTURE") ""
"chprop" forVar "" "LAYER" (strcat (cdr (assoc 8 (entget forVar))) " - FUTURE") "")
)
)
)
(setvar "cmdecho" echo)
(princ)
)
(defun layer-list( / layLst)
(vl-load-com)
(vlax-for vFor (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
(setq layLst (cons (vla-get-name vFor) layLst)))
)
... 当然,“怎么样?”对于那些花时间关心的人来说,这起到了很大的作用" 我该如何编写一个单独的例程,在需要时将它们更改回原始层。(见上文) 又快又脏:
(defun c:ftoo( / layLst ss ssEnts echo)
(vl-load-com)
(setq echo (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq ss (ssget "_X" '((8 . "* - FUTURE"))))
(if ss (setq ssEnts (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))))
(if ssEnts
(mapcar (function (lambda (x) (vl-cmdf "chprop" x "" "layer"
(substr (cdr (assoc 8 (entget x))) (- (strlen (cdr (assoc 8 (entget x)))) 9)) ""))) ssEnts)
)
(setvar "cmdecho" echo)
(princ)
)
当我试着运行这个时,这就是我得到的
我不需要它来改变层回。我想做的就是启动应用程序。。。选择我要更改回正常层的对象,然后将其移回非未来层。 对不起,我实际上在工作(sshh,不要告诉任何人),所以我正在努力尽快做到这一点。
(defun c:ftoo( / layLst ss ssEnts echo)
(vl-load-com)
(setq echo (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq ss (ssget '((8 . "* - FUTURE"))))
(if ss (setq ssEnts (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))))
(foreach forVar ssEnts
(if (member (substr (cdr (assoc 8 (entget forVar))) 1 (- (strlen (cdr (assoc 8 (entget forVar)))) 9)) (layer-list))
(vl-cmdf "chprop" forVar "" "LAYER" (substr (cdr (assoc 8 (entget forVar))) 0 (- (strlen (cdr (assoc 8 (entget forVar)))) 9)) "")
(vl-cmdf "-layer" "new" (substr (cdr (assoc 8 (entget forVar))) 1 (- (strlen (cdr (assoc 8 (entget forVar)))) 9)) ""
"chprop" forVar "" "LAYER" (substr (cdr (assoc 8 (entget forVar))) 1 (- (strlen (cdr (assoc 8 (entget forVar)))) 9)) "")
)
)
(setvar "cmdecho" echo)
(princ)
)
(defun layer-list( / layLst)
(vl-load-com)
(vlax-for vFor (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
(setq layLst (cons (vla-get-name vFor) layLst)))
)
页:
[1]
2