按ACI拆分层
大家好,我又提了一个奇怪的问题。
是否可以通过script/lisp实现这一点。
我有一个dwg模型。
模型有层,但层中有不同颜色的实体。
例如:
层名称=屋顶;实体颜色=256(3dsolid)
层名称=屋顶;实体颜色=83(3dsolid)
是否可以将其转换为:
新图层名=“roof 256”(包含颜色为256且图层名为roof的图元)
新图层名=“roof 83”(包含颜色为83且图层名为roof的图元)
我知道这听起来似乎没有逻辑,但确实如此
谢谢 当然有可能。。。当您创建新层并将对象按颜色更改为驻留在适当的对应层中时,我建议您也将新层的颜色更改为与命名的颜色完全相同,并且最终可以将所有对象的颜色更改为“BYLAYER”-颜色256-对象将采用层颜色。。。
请注意,“Roof 256”层无法装箱,因为256色不存在。。。
(vl-load-com)
(defun c:FOO (/ *error* ss acDoc layerName)
(defun *error* (msg)
(if acDoc (vla-endundomark acDoc))
(cond ((not msg)) ; Normal exit
((member msg '("Function cancelled" "quit / exit abort"))) ; <esc> or (quit)
((princ (strcat "\n** Error: " msg " ** "))) ; Fatal error, display it
)
(princ)
)
(if (setq ss (ssget "_:L"))
(progn
(vla-startundomark
(setq acDoc (vla-get-activedocument (vlax-get-acad-object)))
)
(vlax-for x (setq ss (vla-get-activeselectionset acDoc))
(if
(not (tblsearch "layer"
(setq layerName (strcat (vla-get-layer x)
" "
(itoa (vla-get-color x))
)
)
)
)
(vla-add (vla-get-layers acDoc) layerName)
)
(vla-put-layer x layerName)
)
(vla-delete ss)
)
)
(*error* nil)
)
这只是一个虚假的陈述,马尔科。。。在属性中设置为“ByLayer color”的任何图元上使用此选项:
(vla-get-color (vlax-ename->vla-object (car (entsel))))
谢谢谢谢:)工作100%救了我一天。
不客气;我很乐意帮忙。
是的,但在“Roof 256”层中创建了具有256色的对象后,原始层“Roof”将为空。。。 我提议:
(defun c:layerbycolor ( / c e i s )
(if (setq s (ssget "_:L"))
(repeat (setq i (sslength s))
(setq e (entget (ssname s (setq i (1- i)))))
(if (setq c (cdr (assoc 62 e)))
(entmod (subst (cons 8 (strcat (cdr (assoc 8 e)) " " (itoa c))) (assoc 8 e) e))
)
)
)
(princ)
) RenderMan的代码很好。。。我稍微修改了一下:
(vl-load-com)
(defun c:splitlayersbycolor (/ *error* ss acDoc layerName)
(defun *error* (msg)
(if acDoc (vla-endundomark acDoc))
(cond ((not msg)) ; Normal exit
((member msg '("Function cancelled" "quit / exit abort"))) ; <esc> or (quit)
((princ (strcat "\n** Error: " msg " ** "))) ; Fatal error, display it
)
(princ)
)
(if (setq ss (ssget "_:L"))
(progn
(vla-startundomark
(setq acDoc (vla-get-activedocument (vlax-get-acad-object)))
)
(vlax-for x (setq ss (vla-get-activeselectionset acDoc))
(if
(not (tblsearch "layer"
(setq layerName (strcat (vla-get-layer x)
" "
(itoa (vla-get-color x))
)
)
)
)
(progn
(vla-add (vla-get-layers acDoc) layerName)
(vla-put-truecolor (vla-item (vla-get-layers acDoc) layerName) (vla-get-truecolor x))
(vla-put-color x 256)
)
)
(vla-put-layer x layerName)
)
(vla-delete ss)
)
)
(*error* nil)
)
M、 R。
现在,通过拆分创建的层中的对象都具有颜色“ByLayer”,并且拆分层的颜色已更改为引用实体的颜色,就像我在上一篇文章中解释的那样。。。
我不争辩逻辑,我同意你。。。但是(1)这不是OP(最初)要求的,(2)这与你之前所做的错误陈述无关。
页:
[1]
2