乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
楼主: StuboJones

[编程交流] 按颜色选择对象

[复制链接]

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 10:23:39 | 显示全部楼层
尽管如此,重读你的帖子。。。这仍然会选择所有属于ByLayer的对象(即使这些层设置为其他颜色)。所以试试这个:
然后你这样称呼它:
请注意,这将选择所有选项卡上的所有内容。如果您只想选择当前选项卡上的内容,请执行以下操作:
  1. (sssetfirst nil (ssget "_x" (cons (cons 410 (getvar "CTAB")) (ssfilter-by-color 1))))
回复

使用道具 举报

6

主题

60

帖子

54

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 10:24:28 | 显示全部楼层
大家好,
 
我真的对这个帖子很感兴趣,因为我正在尝试做类似的事情。
I'ld like to select all line in a drawing,check what color and linetype they are,then put their in right layer我想选择图形中的所有线条,检查它们是什么颜色和线型,然后将它们放在正确的图层中。
任何帮助都将不胜感激:wink:。
 
以下是我目前得到的信息:
 
  1. (while (setq blks (ssget "x" (list (cons 0 "insert"))))
  2. (command "explode" blks)
  3. (repeat (sslength blks))
  4. )
  5. (setq objss (ssget "x" (list (cons 0 "*line"))))
  6. (setq objent (entget (ssname objss 0)))
  7. (setq objcol (assoc 62 objent)) ; not working, color is bylayer
  8. (setq objlty (assoc 6 objent))   ; not working, lt bylayer
  9. (cond
  10.          ((and (= objcol 2)(= objlty "continuous")))
  11. (subst (cons 8 "ISO_LIN_UNI")(assoc 8 objent) objent))
  12. (entmod objent)

 
 
某人
回复

使用道具 举报

14

主题

74

帖子

60

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-6 10:28:05 | 显示全部楼层
大家好,
我犯了一个错误:哎哟:
数字256的意思是“按层”,不像我写的“红色-按层”,因为不存在颜色257(黄色-按层)。
 
但是,有一些建议可以定位特定的颜色BYLAYER(红色BYLAYER、黄色BYLAYER等)。
 
谢谢你的耐心。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 10:32:52 | 显示全部楼层
 
 
  1. (defun EntityLayerColor (entity)
  2. (if (eq (type entity) 'ENAME)
  3.    (cdr (assoc 62 (tblsearch "LAYER" (cdr (assoc 8 (entget entity))))))
  4. )
  5. )

 
如。
  1. (EntityLayerColor (car (entsel)))
回复

使用道具 举报

6

主题

60

帖子

54

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 10:35:54 | 显示全部楼层
Thx Irneb,
 
你的代码帮助很大。
尽管如此,我也想按线型过滤。
 
f、 e.:
如果图元的颜色为“1”,线型为“隐藏”-->则选择图元放置在此层中
如果图元的颜色为“1”,线型为“ACAD\U ISO10W100”-->则选择图元放置在该层中
...
 
 
某人
回复

使用道具 举报

14

主题

74

帖子

60

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-6 10:37:25 | 显示全部楼层
你好
谢谢大家的回复。
张贴的代码非常有用。
当做
马可
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 10:41:14 | 显示全部楼层
不客气。 
只有这两层吗?或者,您是否在寻找一种方法,根据其属性将特定实体放置到不同的图层上?
 
如果是这样的话,我根本不会选择过滤。相反,我会选择所有线条(无论其属性如何)。然后还有一个目标层列表及其想要的属性。下一步,通过选择集中的所有行,使用entget检查它们的DXF代码(当然还有它们的ByLayer颜色/线型-使用alanjt的代码作为示例)。使用cond检查当前线路应该移动到哪一层。现在,我宁愿使用entmod将实体修改到该层上,而不是使用类似于change命令的命令(只是因为每行要执行一次,也就是说,这样会更快)。
 
实际上,这听起来像是似曾相识,我肯定我在另一个帖子中看到过类似(如果不是完全相同的话)的问题。我只需要搜索一些,记不清是什么线索。
回复

使用道具 举报

6

主题

60

帖子

54

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 10:45:40 | 显示全部楼层
嗨,irneb,
 
谢谢你的回复。
事实上,我一开始是这样做的。
 
  1. )
  2. (setq objss (ssget "x" (list (cons 0 "*line"))))
  3. (setq objent (entget (ssname objss 0)))
  4. (setq objcol (assoc 62 objent)) ; not working, color is bylayer
  5. (setq objlty (assoc 6 objent))   ; not working, lt bylayer
  6. (cond
  7.          ((and (= objcol 2)(= objlty "continuous")))
  8. (subst (cons 8 "ISO_LIN_UNI")(assoc 8 objent) objent))
  9. (entmod objent)

 
问题是我真的是一个Lisp程序的noob,找不到条件的正确参数。
 
某人
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 10:47:09 | 显示全部楼层
对于ByLayer colour&ltype,DXF代码为空。在这种情况下,看看alanjt是如何在14号帖子中掌握图层的颜色的。
 
因此,您需要检查是否返回了nil,然后从层中获取col&lty。幸运的是,在lisp中,您可以一次性完成项提取和检入(这是lisp的优点之一)。基本上你可以这样做:
  1. ;; ... code up to the entget
  2. (if (not (setq objcol (cdr (assoc 62 objent))))
  3. (setq objcol (cdr (assoc 62 (tblsearch "LAYER" (cdr (assoc 8 objent))))))
  4. )
  5. (if (not (setq objlty (cdr (assoc 6 objent))))
  6. (setq objlty (cdr (assoc 6 (tblsearch "LAYER" (cdr (assoc 8 objent))))))
  7. )
  8. ;; ... further code
回复

使用道具 举报

6

主题

60

帖子

54

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 10:49:19 | 显示全部楼层
我将你的代码添加到我的代码中,但它并不像我预期的那样进行。
 
  1. (setq objss (ssget "x" (list (cons 0 "*line"))))
  2. (setq objent (entget (ssname objss 0)))
  3. (if (not (setq objcol (cdr (assoc 62 objent))))
  4. (setq objcol (cdr (assoc 62 (tblsearch "LAYER" (cdr (assoc 8 objent))))))
  5. )
  6. (if (not (setq objlty (cdr (assoc 6 objent))))
  7. (setq objlty (cdr (assoc 6 (tblsearch "LAYER" (cdr (assoc 8 objent))))))
  8. )
  9. (cond
  10.          ((and (= objcol 2)(= objlty "continuous")))
  11. (subst (cons 8 "ISO_LIN_UNI")(assoc 8 objent) objent))
  12. (entmod objent)

 
 
很抱歉是我,但我想我在什么地方失去了你。
你之前的代码是否意味着。。。
 
  1. 12

; 如果objcol不是objent的颜色?
; 然后
  1. 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”。
     
    对不起,如果我把你弄糊涂了:哎呀:。
     
    某人
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

    QQ|关于我们|小黑屋|乐筑天下 繁体中文

    GMT+8, 2025-3-7 00:14 , Processed in 0.385955 second(s), 70 queries .

    © 2020-2025 乐筑天下

    联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表