明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2357|回复: 9

[求助]請問有否能將圖面的所有圖元之顏色都轉為Bycolor

[复制链接]
发表于 2006-2-9 10:55 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2006-2-10 13:14:56 编辑

r求助一下,工作上有需要

厂商要求所有物件(对象)的LAYER都不可以是Bylayer(还明文规定)

就是说所有的图元都要有各自的顏色(Bycolor)

有无此程序能一次转换呢?因为图量很大,谢谢

举个例:如果我把图面上的所有图层都改为白色

那Bycolor(即非Bylayer)的图元就会闻风不动还是保持他的顏色

只有Bylayer的图元会跟著变白色...

现在就是希望能一次转换让所有的图元都能自动套到相应的顏色里

多谢了

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2006-2-9 11:04 | 显示全部楼层
这个问题很复杂,这里有一个bylayer的
  1. ;Good_将块block的实体不是BYLAYER的变成bylayer(lUCAS)(有嵌套块)
  2. ;嵌套块-----写一个递归的程序(很简单的)    8-)
  3. ;;By LUCAS
  4. ;;增加了嵌套图块
  5. ;;属性,引线,公差,尺寸....就留给你
  6. (defun BLKBYLYR_LAI (BN COL / ENT NAME)
  7.   (vlax-for ENT
  8.      (vla-item (vla-get-blocks
  9.    (vla-get-activedocument (vlax-get-acad-object))
  10.         )
  11.         BN
  12.      )
  13.     (vla-put-color ENT COL)
  14.     (if (= (vla-get-objectname ENT) "AcDbBlockReference")
  15.       (BLKBYLYR_LAI (vla-get-name ENT) COL) ;递归
  16.     )
  17.   )
  18. )
  19. (defun C:xbl (/ E LST)
  20.   (if (and (setq E (car (entsel "\nSelect block: ")))
  21.     (setq COL (acad_colordlg 7))
  22.       )
  23.     (BLKBYLYR_LAI (cdr (assoc 2 (entget E))) COL)
  24.   )
  25.   (command "_.REGEN")
  26.   (princ)
  27. )
发表于 2006-2-9 11:44 | 显示全部楼层
(defun c:test ()
  (if (setq ss (ssget "X"))
    (command "chprop" ss "" "co" "bylayer" "")
  )
  (princ)
)
 楼主| 发表于 2006-2-10 13:13 | 显示全部楼层

谢谢楼上两位大大了

我先试试看效果ㄛ

 楼主| 发表于 2006-2-10 13:23 | 显示全部楼层

三楼大大误会我的意思了

顏色是要「不可以bylayer」

每一个图元的顏色都能对应--该图层的顏色

发表于 2006-2-10 17:19 | 显示全部楼层
(defun c:test( / ss i ent ents lay col)
  (setq ss (ssget))
  (setq i 0)
  (repeat (sslength ss)
    (setq ent (ssname ss i))
    (setq ents (entget ent))
    (setq lay (cdr (assoc 8 ents)))
    (setq col (cdr (assoc 62 (tblsearch "layer" lay))))
    (if (assoc 62 ents)
      (setq ents (subst (cons 62 col) (assoc 62 ents) ents))
      (setq ents (append ents (list (cons 62 col))))
    )
    (entmod ents)
    (setq i (1+ i))
  )
  (princ)
)
发表于 2006-2-10 22:33 | 显示全部楼层

确实没理解楼主的意思,修改编译文件:

本帖子中包含更多资源

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

x
发表于 2006-2-17 13:25 | 显示全部楼层
本帖最后由 作者 于 2006-2-18 10:55:25 编辑
  1.   ;;; ==================================================================
  2. (defun test2 (/ i layercol layername layer-table ss)
  3.   (command "LAYER" "ON" " *" "T" "*" "U" "*" "")
  4.   (setq layer-table (th1-table "layer")
  5. i -1
  6.   )
  7.   (while (setq layername (nth (1+ i) layer-table))
  8.     (setq layercol (th-get-laycolor (read layername)))
  9.     (if (setq ss (ssget "x" (list (cons 8 layername))))
  10.       (command "change" ss "" "p" "c" layercol "")
  11.     )
  12.     (setq i (1+ i))
  13.   )
  14.   (princ)
  15. )
  16. ;;; ==================================================================
  17. ;;; 返回层的颜色
  18. (defun th-get-laycolor (laname / la1 la col)
  19.   (setq la (cdr (assoc 2 (tblnext "layer" t))))
  20.   (if (/= la laname)
  21.     (setq la1 (tblnext "layer" nil)
  22.    la (cdr (assoc 2 la1))
  23.    col (cdr (assoc 62 la1))
  24.     )
  25.     (setq col (abs (cdr (assoc 62 la))))
  26.   )
  27.   (princ "\n颜色为 : ")
  28.   col
  29. )
  30. ;;; ==================================================================
  31. ;;; 功  能  返回包含在指定符号表中的所有元素
  32. ;;; 参  数  一个符号表名称
  33. (defun th1-table (s / d r)
  34.   (while (setq d (tblnext s (null d)))
  35.     (setq r (cons (cdr (assoc 2 d)) r))
  36.   )
  37.   (vl-remove 'nil (acad_strlsort (reverse r)))
  38. )
  39. ;;; ==================================================================
问各位大虾一个问题:
上面的程序运行后,改变了层的状态。有什么办法不改其状态或改变后再恢复?
发表于 2006-2-18 11:22 | 显示全部楼层
  1. ;解决了上贴问题:
  2. ;;; ==================================================================
  3. ;;; argument: state
  4. ;;; 1 frozen
  5. ;;; 2 thawed
  6. ;;; 3 on
  7. ;;; 4 off
  8. ;;; 5 lock
  9. ;;; 6 not locked
  10. ;;; 7 plottable
  11. ;;; 8 not plottable
  12. ;;; example: (layer-state 1)
  13. ;;; return values: list of layers
  14. (defun th-layer-state (state / typ names tf skip)
  15.   (setq names nil)
  16.   (vlax-for layer (vla-get-layers (vla-get-activedocument
  17.          (vlax-get-acad-object)
  18.       )
  19.     ) (setq skip nil)
  20.      (cond
  21.        ((= 1 state)
  22.   (setq typ (vla-get-freeze layer)
  23.         tf :vlax-true
  24.   )
  25.        )
  26.        ((= 2 state)
  27.   (setq typ (vla-get-freeze layer)
  28.         tf :vlax-false
  29.   )
  30.        )
  31.        ((= 3 state)
  32.   (setq typ (vla-get-layeron layer)
  33.         tf :vlax-true
  34.   )
  35.        )
  36.        ((= 4 state)
  37.   (setq typ (vla-get-layeron layer)
  38.         tf :vlax-false
  39.   )
  40.        )
  41.        ((= 5 state)
  42.   (setq typ (vla-get-lock layer)
  43.         tf :vlax-true
  44.   )
  45.        )
  46.        ((= 6 state)
  47.   (setq typ (vla-get-lock layer)
  48.         tf :vlax-false
  49.   )
  50.        )
  51.        ((= 7 state)
  52.   (setq typ (vla-get-plottable layer)
  53.         tf :vlax-true
  54.   )
  55.        )
  56.        ((= 8 state)
  57.   (setq typ (vla-get-plottable layer)
  58.         tf :vlax-false
  59.   )
  60.        )
  61.        (t
  62.   (setq skip t)
  63.        )
  64.      ) (if (and
  65.       (null skip)
  66.       (eq typ tf)
  67.     )
  68.   (setq names (cons (vla-get-name layer) names))
  69.        )
  70.   )
  71.   (reverse names)
  72. )
  73. ;;; ==================================================================
  74. (defun test1 (/ i layercol layername layer-table  
  75.   layer-table5 ss
  76.       )
  77.   (setq layer-table (th1-table "layer")
  78. layer-table5 (th-layer-state 5)
  79. i -1
  80.   )
  81.   (while (setq layername (nth (1+ i) layer-table))
  82.     (setq layercol (th-get-laycolor (read layername)))
  83.     (if (member layername layer-table5)
  84.       (progn
  85. (command "LAYER" "U" layername "")
  86. (if (setq ss (ssget "x" (list (cons 8 layername))))
  87.    (command "change" ss "" "p" "c" layercol "")
  88. )
  89. (command "LAYER" "lo" layername "")
  90.       )
  91.       (if (setq ss (ssget "x" (list (cons 8 layername))))
  92. (command "change" ss "" "p" "c" layercol "")
  93.       )
  94.     )
  95.     (setq i (1+ i))
  96.   )
  97.   (princ)
  98. )
发表于 2006-2-18 12:25 | 显示全部楼层

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-5-4 15:33 , Processed in 0.252328 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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