然后你这样称呼它:
请注意,这将选择所有选项卡上的所有内容。如果您只想选择当前选项卡上的内容,请执行以下操作:
(sssetfirst nil (ssget "_x" (cons (cons 410 (getvar "CTAB")) (ssfilter-by-color 1)))) 大家好,
我真的对这个帖子很感兴趣,因为我正在尝试做类似的事情。
I'ld like to select all line in a drawing,check what color and linetype they are,then put their in right layer我想选择图形中的所有线条,检查它们是什么颜色和线型,然后将它们放在正确的图层中。
任何帮助都将不胜感激:wink:。
以下是我目前得到的信息:
(while (setq blks (ssget "x" (list (cons 0 "insert"))))
(command "explode" blks)
(repeat (sslength blks))
)
(setq objss (ssget "x" (list (cons 0 "*line"))))
(setq objent (entget (ssname objss 0)))
(setq objcol (assoc 62 objent)) ; not working, color is bylayer
(setq objlty (assoc 6 objent)) ; not working, lt bylayer
(cond
((and (= objcol 2)(= objlty "continuous")))
(subst (cons 8 "ISO_LIN_UNI")(assoc 8 objent) objent))
(entmod objent)
某人 大家好,
我犯了一个错误:哎哟:
数字256的意思是“按层”,不像我写的“红色-按层”,因为不存在颜色257(黄色-按层)。
但是,有一些建议可以定位特定的颜色BYLAYER(红色BYLAYER、黄色BYLAYER等)。
谢谢你的耐心。
(defun EntityLayerColor (entity)
(if (eq (type entity) 'ENAME)
(cdr (assoc 62 (tblsearch "LAYER" (cdr (assoc 8 (entget entity))))))
)
)
如。
(EntityLayerColor (car (entsel))) Thx Irneb,
你的代码帮助很大。
尽管如此,我也想按线型过滤。
f、 e.:
如果图元的颜色为“1”,线型为“隐藏”-->则选择图元放置在此层中
如果图元的颜色为“1”,线型为“ACAD\U ISO10W100”-->则选择图元放置在该层中
...
某人 你好
谢谢大家的回复。
张贴的代码非常有用。
当做
马可 不客气。
只有这两层吗?或者,您是否在寻找一种方法,根据其属性将特定实体放置到不同的图层上?
如果是这样的话,我根本不会选择过滤。相反,我会选择所有线条(无论其属性如何)。然后还有一个目标层列表及其想要的属性。下一步,通过选择集中的所有行,使用entget检查它们的DXF代码(当然还有它们的ByLayer颜色/线型-使用alanjt的代码作为示例)。使用cond检查当前线路应该移动到哪一层。现在,我宁愿使用entmod将实体修改到该层上,而不是使用类似于change命令的命令(只是因为每行要执行一次,也就是说,这样会更快)。
实际上,这听起来像是似曾相识,我肯定我在另一个帖子中看到过类似(如果不是完全相同的话)的问题。我只需要搜索一些,记不清是什么线索。 嗨,irneb,
谢谢你的回复。
事实上,我一开始是这样做的。
)
(setq objss (ssget "x" (list (cons 0 "*line"))))
(setq objent (entget (ssname objss 0)))
(setq objcol (assoc 62 objent)) ; not working, color is bylayer
(setq objlty (assoc 6 objent)) ; not working, lt bylayer
(cond
((and (= objcol 2)(= objlty "continuous")))
(subst (cons 8 "ISO_LIN_UNI")(assoc 8 objent) objent))
(entmod objent)
问题是我真的是一个Lisp程序的noob,找不到条件的正确参数。
某人 对于ByLayer colour<ype,DXF代码为空。在这种情况下,看看alanjt是如何在14号帖子中掌握图层的颜色的。
因此,您需要检查是否返回了nil,然后从层中获取col<y。幸运的是,在lisp中,您可以一次性完成项提取和检入(这是lisp的优点之一)。基本上你可以这样做:
;; ... code up to the entget
(if (not (setq objcol (cdr (assoc 62 objent))))
(setq objcol (cdr (assoc 62 (tblsearch "LAYER" (cdr (assoc 8 objent))))))
)
(if (not (setq objlty (cdr (assoc 6 objent))))
(setq objlty (cdr (assoc 6 (tblsearch "LAYER" (cdr (assoc 8 objent))))))
)
;; ... further code 我将你的代码添加到我的代码中,但它并不像我预期的那样进行。
(setq objss (ssget "x" (list (cons 0 "*line"))))
(setq objent (entget (ssname objss 0)))
(if (not (setq objcol (cdr (assoc 62 objent))))
(setq objcol (cdr (assoc 62 (tblsearch "LAYER" (cdr (assoc 8 objent))))))
)
(if (not (setq objlty (cdr (assoc 6 objent))))
(setq objlty (cdr (assoc 6 (tblsearch "LAYER" (cdr (assoc 8 objent))))))
)
(cond
((and (= objcol 2)(= objlty "continuous")))
(subst (cons 8 "ISO_LIN_UNI")(assoc 8 objent) objent))
(entmod objent)
很抱歉是我,但我想我在什么地方失去了你。
你之前的代码是否意味着。。。
12
; 如果objcol不是objent的颜色?
; 然后
13
; 将objent层的颜色与objcol关联?
我认为这应该是一个非常简单的代码。
也许我没有全面地解释我自己,或者我没有理解你想说的。但我不确定这段代码是否是我所需要的。
我想做的是:
1、选择所有*线对象
2、过滤条件如下:
[列表]
[*]颜色“1”,线型“continuous”-->放入图层“blablabla”
[*]颜色“1”,线型“hidden”-->放入图层“blablabla”
[*]颜色“1”,线型“center”-->放入图层“blablabla”
[*]颜色“2”,线型“continuous”->放入图层“blablabla”
[*]颜色“2”,线型“hidden”-->放入图层“blablabla”
[*]颜色“2”,线型“center”-->放入图层“blablabla”
。。。
我之所以对你的代码感兴趣,是因为它按颜色选择实体,即使这种颜色是图层颜色而不是obj颜色。之后,我只需要检查sset的线型,并选择一个层来分配给它(我猜…)。
绘制此库的白痴使用任何类型的层绘制任何部分,然后调整属性。有些线条有颜色,有些线条的颜色设置为“bylayer”,并且位于正确的图层中,有些线条位于错误的图层中。
这就像你在图层“0”中绘制一个完整的图形,然后用正确的颜色将一些线条更改为正确的图层,其他线条则保留在图层“0”中,但更改属性。真是一团糟。
我需要把这些线重新放在正确的层中。然后我可以将“all”行的颜色属性更改回“bylayer”。
我唯一可以作为参考的是线条的颜色,不管它们在哪个层中,也不管它们的颜色是否设置为“n色”或“bylayer”。
对不起,如果我把你弄糊涂了:哎呀:。
某人
页:
1
[2]