cancer24 发表于 2022-7-5 20:06:45

[需要口齿不清]放置所有对象

大家好,
我需要一个lisp来执行以下操作:
 
将图形中所有颜色相同的对象(直线、多段线、图案填充、圆弧等)放置在单独的图层上。
 
如果没有,你能告诉我怎么手动操作吗。。。。。
 
问题是,我有巨大的建筑图纸需要导出到3D程序。。。。。。并非所有对象都设置为“按层”。。。。。这样就更清楚了。
 
当做

BIGAL 发表于 2022-7-5 20:19:52

不确定这是否有帮助,如果MEP以手动方式支持,则可以选择使用过滤器颜色作为Autocad答案。

cancer24 发表于 2022-7-5 20:42:45

 
我不知道如何使用filter命令。。。。。。我有这张图:
有些对象属性是“按层”设置的,有些是覆盖的。。。。。
 
在这种情况下,如何使用filter命令?
实例图纸

ttray33y 发表于 2022-7-5 20:43:49

(setq xcol "1")
(setq xlay "NEW")
(defun c:test(/ cnt xset ent enlist)
(defun FilterClrNumbX(xset valu)
   (setq valu(atoi valu) layerList(list))
   (setq tbl(tblnext "LAYER" T))
   (if(= valu (cdr(assoc 62 tbl)))
   (setq layerList(append layerList (list (cdr(assoc 2 tbl)))))
   )
   (while(setq tbl(tblnext "LAYER"))
   (if(= valu (cdr(assoc 62 tbl)))
       (setq layerList(append layerList (list (cdr(assoc 2 tbl)))))
   )
   )
   (setq cnt 0 newSet(ssadd))
   (while(< cnt (sslength xset))
   (setq ent(ssname xset cnt))
   (setq enlist(entget ent))
   (if (assoc 62 enlist)
       (if(= valu (cdr(assoc 62 enlist)))
         (ssadd ent newSet)
       )
       (if(member (cdr(assoc 8 enlist)) layerList)
         (ssadd ent newSet)
       )
   )
   (setq cnt(+ cnt 1))
   )
   newSet
)
(setvar "cmdecho" 0)
(setq xcoll (getstring (strcat "\nEnter Color Numer, <" xcol ">: ")))
(if (= 1lay "")
   (setq xcoll xcol)
   (setq xcol xcoll)
)
(setq 1lay (getstring (strcat "\nEnter Layer Name, <" xlay ">: ")))
(if (= 1lay "")
   (setq 1lay xlay)
   (setq xlay 1lay)
)
(setq xset
   (ssget"X"
   (list
       (cons -4 "<OR")
         (cons 0 "ARC")
         (cons 0 "CIRCLE")
         (cons 0 "ELLIPSE")
         (cons 0 "IMAGE")
         (cons 0 "INSERT")
         (cons 0 "LINE")
         (cons 0 "LWPOLYLINE")
         (cons 0 "MLINE")
         (cons 0 "MTEXT")
         (cons 0 "POINT")
         (cons 0 "POLYLINE")
         (cons 0 "SOLID")
         (cons 0 "TEXT")
         (cons 0 "TRACE")
         (cons 0 "XLINE")
       (cons -4 "OR>")
   )
   )
)

(if(and xset(> (sslength xset) 0))(setq xset(FilterClrNumbX xset xcol)))
(if (and xset (> (sslength xset) 0))
   (progn
(command "-layer" "new" xlay "")
(command "change" xset "" "Properties" "LAyer" xlay "")
   )
)
(setvar "cmdecho" 1)
(princ)
)
(princ "\n Type test")
(princ)

 
试试这个,我的朋友,让我们知道。干杯

wkplan 发表于 2022-7-5 21:06:28

一条较短的路
 
你可以写以下几行:
(if (and xset (> (sslength xset) 0))
   (setq xset (FilterClrNumbX xset xcol))
)
(if (and xset (> (sslength xset) 0))
   (progn
   (command "-layer" "new" xlay "")
   (command "change" xset "" "Properties" "LAyer" xlay "")
   )
)
缩写为:
问候
沃尔夫冈

cancer24 发表于 2022-7-5 21:08:11

 
谢谢你的回复,但请原谅,我对lisp的了解非常有限,如何执行这个lisp?
 
我把它复制到一个记事本文件中,保存到。lsp格式,在Autocad中运行,按说明键入命令“test”。。。。。然后呢?
 
也许我没有说清楚。。。
 
获取图形中的所有对象。。。。(所有内容、直线、多段线、图案填充、圆弧等)。。。。。按其真实颜色(显示在屏幕上)对其进行排序,并将其移动到不同的层。。。。i、 e.屏幕上显示为红色的所有对象,移动到新层。。。。。。。图层上所有颜色为灰色的对象。。。
 
老实说,我发现一个lisp可以做到这一点,但它不稳定,我必须执行几次,然后它就工作了,它在块上不工作,所以我必须先分解它们。。。。。它叫Col2lay
col2lay。拉链
页: [1]
查看完整版本: [需要Lisp程序]放置所有对象