乐筑天下

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

[编程交流] 按ACI拆分层

[复制链接]

7

主题

29

帖子

22

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-6 06:53:18 | 显示全部楼层 |阅读模式
大家好,
我又提了一个奇怪的问题。
 
是否可以通过script/lisp实现这一点。
 
我有一个dwg模型。
 
模型有层,但层中有不同颜色的实体。
 
例如:
层名称=屋顶;实体颜色=256(3dsolid)
层名称=屋顶;实体颜色=83(3dsolid)
 
是否可以将其转换为:
 
新图层名=“roof 256”(包含颜色为256且图层名为roof的图元)
新图层名=“roof 83”(包含颜色为83且图层名为roof的图元)
 
 
我知道这听起来似乎没有逻辑,但确实如此
 
谢谢
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 07:00:29 | 显示全部楼层
当然有可能。。。当您创建新层并将对象按颜色更改为驻留在适当的对应层中时,我建议您也将新层的颜色更改为与命名的颜色完全相同,并且最终可以将所有对象的颜色更改为“BYLAYER”-颜色256-对象将采用层颜色。。。
 
请注意,“Roof 256”层无法装箱,因为256色不存在。。。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:05:58 | 显示全部楼层
  1. (vl-load-com)
  2. (defun c:FOO (/ *error* ss acDoc layerName)
  3. (defun *error* (msg)
  4.    (if acDoc (vla-endundomark acDoc))
  5.    (cond ((not msg))                                                   ; Normal exit
  6.          ((member msg '("Function cancelled" "quit / exit abort")))    ; <esc> or (quit)
  7.          ((princ (strcat "\n** Error: " msg " ** ")))                  ; Fatal error, display it
  8.    )
  9.    (princ)
  10. )
  11. (if (setq ss (ssget "_:L"))
  12.    (progn
  13.      (vla-startundomark
  14.        (setq acDoc (vla-get-activedocument (vlax-get-acad-object)))
  15.      )
  16.      (vlax-for x (setq ss (vla-get-activeselectionset acDoc))
  17.        (if
  18.          (not (tblsearch "layer"
  19.                          (setq layerName (strcat (vla-get-layer x)
  20.                                                  " "
  21.                                                  (itoa (vla-get-color x))
  22.                                          )
  23.                          )
  24.               )
  25.          )
  26.           (vla-add (vla-get-layers acDoc) layerName)
  27.        )
  28.        (vla-put-layer x layerName)
  29.      )
  30.      (vla-delete ss)
  31.    )
  32. )
  33. (*error* nil)
  34. )
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:10:01 | 显示全部楼层
 
这只是一个虚假的陈述,马尔科。。。在属性中设置为“ByLayer color”的任何图元上使用此选项:
 
  1. (vla-get-color (vlax-ename->vla-object (car (entsel))))
回复

使用道具 举报

7

主题

29

帖子

22

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-6 07:13:09 | 显示全部楼层
谢谢谢谢:)工作100%救了我一天。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:17:52 | 显示全部楼层
 
不客气;我很乐意帮忙。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 07:21:00 | 显示全部楼层
 
是的,但在“Roof 256”层中创建了具有256色的对象后,原始层“Roof”将为空。。。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:23:29 | 显示全部楼层
我提议:
  1. (defun c:layerbycolor ( / c e i s )
  2.    (if (setq s (ssget "_:L"))
  3.        (repeat (setq i (sslength s))
  4.            (setq e (entget (ssname s (setq i (1- i)))))
  5.            (if (setq c (cdr (assoc 62 e)))
  6.                (entmod (subst (cons 8 (strcat (cdr (assoc 8 e)) " " (itoa c))) (assoc 8 e) e))
  7.            )
  8.        )
  9.    )
  10.    (princ)
  11. )
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 07:27:40 | 显示全部楼层
RenderMan的代码很好。。。我稍微修改了一下:
 
  1. (vl-load-com)
  2. (defun c:splitlayersbycolor (/ *error* ss acDoc layerName)
  3. (defun *error* (msg)
  4.    (if acDoc (vla-endundomark acDoc))
  5.    (cond ((not msg))                                                   ; Normal exit
  6.          ((member msg '("Function cancelled" "quit / exit abort")))    ; <esc> or (quit)
  7.          ((princ (strcat "\n** Error: " msg " ** ")))                  ; Fatal error, display it
  8.    )
  9.    (princ)
  10. )
  11. (if (setq ss (ssget "_:L"))
  12.    (progn
  13.      (vla-startundomark
  14.        (setq acDoc (vla-get-activedocument (vlax-get-acad-object)))
  15.      )
  16.      (vlax-for x (setq ss (vla-get-activeselectionset acDoc))
  17.        (if
  18.          (not (tblsearch "layer"
  19.                          (setq layerName (strcat (vla-get-layer x)
  20.                                                  " "
  21.                                                  (itoa (vla-get-color x))
  22.                                          )
  23.                          )
  24.               )
  25.          )
  26.          (progn
  27.            (vla-add (vla-get-layers acDoc) layerName)
  28.            (vla-put-truecolor (vla-item (vla-get-layers acDoc) layerName) (vla-get-truecolor x))
  29.            (vla-put-color x 256)
  30.          )
  31.        )
  32.        (vla-put-layer x layerName)
  33.      )
  34.      (vla-delete ss)
  35.    )
  36. )
  37. (*error* nil)
  38. )

 
M、 R。
 
现在,通过拆分创建的层中的对象都具有颜色“ByLayer”,并且拆分层的颜色已更改为引用实体的颜色,就像我在上一篇文章中解释的那样。。。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:36:08 | 显示全部楼层
 
我不争辩逻辑,我同意你。。。但是(1)这不是OP(最初)要求的,(2)这与你之前所做的错误陈述无关。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 10:34 , Processed in 0.352659 second(s), 72 queries .

© 2020-2025 乐筑天下

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