明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 815|回复: 9

[源码] 选对象,按颜色分层

[复制链接]
发表于 2023-3-4 11:18 | 显示全部楼层 |阅读模式
20明经币
请大家帮忙改成可自行选择对象,谢谢!
附件: 您需要 登录 才可以下载或查看,没有账号?注册
发表于 2023-3-4 11:18 | 显示全部楼层
刘炎华 发表于 2023-3-5 20:23
还是会将所有的对象都改了,附上图档您帮忙看下
  1. (defun c:tt ()
  2.   (princ "按对象颜色换层")
  3.   (defun Entmake-Layer(la)
  4.     (entmake (list '(0 . "LAYER")
  5.                     '(100 . "AcDbSymbolTableRecord")
  6.                     '(100 . "AcDbLayerTableRecord")
  7.                    '(70 . 0)
  8.                     (cons 2 la)
  9.               )
  10.     )
  11.   )
  12.   (defun xyp-get-Color (s1 / co)
  13.     (if (setq co (xyp-DXF 62 s1))
  14.       co
  15.       (cdr (assoc 62 (tblsearch "layer" (xyp-DXF 8 s1))))
  16.     )
  17.   )
  18.   (defun xyp-dxf (code e) (cdr (assoc code (entget e))))
  19.   (setq i -1)
  20.   (if (setq ss (ssget))
  21.     (while (setq s1 (ssname ss (setq i (1+ i))))
  22.       (setq co(xyp-get-color s1))
  23.       (setq la (itoa co))
  24.       (Entmake-Layer la)
  25.       (vla-put-layer (vlax-ename->vla-object s1) la)
  26.       (vla-put-color (vlax-ename->vla-object s1) co)
  27.     )
  28.   )
  29.   (princ)
  30. )

回复

使用道具 举报

 楼主| 发表于 2023-3-5 07:51 | 显示全部楼层
原贴:http://bbs.mjtd.com/forum.php?mo ... hlight=%B0%B4%D1%D5
现在可以电脑上网了,贴上源码
(defun C:CN (/ *DOC *OBJ *LAY blocks layers)
(princ "按对象颜色换层")
  (vl-load-com)
  (setq *OBJ (vlax-get-acad-object))
  (setq *DOC (vla-get-activedocument *OBJ))
  (setq *LAY (vla-get-layers *DOC))              ;取得层集合
  (table)
  (setq blocks (vla-get-blocks *DOC))            ;取得塊集合
  (vlax-for block blocks           ;遍歷塊集合
    (vlax-for n block            ;遍歷單個塊
      (ccb n)
    )
  )
  (princ)
)
(defun ccb (object / colour laynam laycol)
  (setq colour (itoa (vla-get-color object)))    ;取得物体颜色号
  (cond            
    ( (or (= colour "256") (= colour "0"))       ;如果物体颜色随层或随块
      (setq laynam (vla-get-layer object))       ;取得物体所在层名
      (setq laycol (cdr (assoc laynam layers)))  ;取得层颜色
      (setq colour (itoa laycol))            
      (ML)                                      
    )
    ( (ML)
      (vla-put-color object 256)                 ;否则改变物体颜色为随层
    )
  )
  (vla-put-layer object colour)                  ;对物体改层到颜色号层
)
(defun ML (/ layobj)
  (if (not (assoc colour layers))                ;如果颜色号不在图层表中
    (progn
      (setq layers (cons (cons colour laycol) layers))
                                                               ;重新构造图层表
      (setq layobj (vla-add *LAY colour))   ;创建颜色号图层
      (vla-put-color layobj colour)              ;对颜色号层赋色
    )
  )
)
(defun table (/ name color Nname)
  (vlax-for n *LAY                               ;遍历层集合
    (setq name (vla-get-name n))                 ;取得层名
    (setq color (vla-get-color n))               ;取得层颜色
    (setq layers (cons (cons name color) layers));获得层名和颜色号表
    (setq Nname (read name))
    (if (= (type Nname) (type 1))                ;如果层名是整数
      (if (= (strlen (itoa Nname)) (strlen name))
        (if (and (> Nname 0) (< Nname 256))      ;并且>0,<256
          (if (/= color Nname)                   ;如果层颜色不等于层名
            (vla-put-color n Nname)              ;则改层颜色为层名
          )
        )
      )
    )
  )
)
回复

使用道具 举报

发表于 2023-3-5 13:51 | 显示全部楼层
你试下看行不行!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

发表于 2023-3-5 14:26 | 显示全部楼层
  1. (defun c:tt ()
  2.   (defun Entmakex-Layer        (lname)
  3.     (entmakex (list '(0 . "LAYER")
  4.                     '(100 . "AcDbSymbolTableRecord")
  5.                     '(100 . "AcDbLayerTableRecord")
  6.                     (cons 2 lname)
  7.               )
  8.     )
  9.     (setvar 'clayer lname)
  10.   )
  11.   (defun xyp-get-Color (s1 / co)
  12.     (if        (setq co (xyp-DXF 62 s1))
  13.       co
  14.       (cdr (assoc 62 (tblsearch "layer" (xyp-DXF 8 s1))))
  15.     )
  16.   )
  17.   (defun xyp-dxf (code e) (cdr (assoc code (entget e))))
  18.   (setq i -1)
  19.   (if (setq ss (ssget))
  20.     (while (setq s1 (ssname ss (setq i (1+ i))))
  21.       (setq la (itoa (xyp-get-color s1)))
  22.       (Entmakex-Layer la)
  23.       (vla-put-layer (vlax-ename->vla-object s1) la)
  24.     )
  25.   )
  26.   (princ)
  27. )
回复

使用道具 举报

 楼主| 发表于 2023-3-5 20:18 | 显示全部楼层

版主,您帮我看下是哪里的问题呢?

提示:错误: AutoCAD 变量设置被拒绝: CLAYER "251"

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

 楼主| 发表于 2023-3-5 20:23 | 显示全部楼层
yaojing38 发表于 2023-3-5 13:51
你试下看行不行!

还是会将所有的对象都改了,附上图档您帮忙看下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

 楼主| 发表于 2023-3-5 21:50 | 显示全部楼层

谢谢版主!可以了
回复

使用道具 举报

发表于 2023-6-14 12:10 来自手机 | 显示全部楼层
刘炎华 发表于 2023-3-5 21:50
谢谢版主!可以了

请问是怎么解决的?
回复

使用道具 举报

发表于 2023-10-27 10:56 | 显示全部楼层

如果是块、嵌套块、外部参照该怎么办
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-2 19:23 , Processed in 0.210245 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表