明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5701|回复: 24

求一小段代码:指定颜色的对象转到指定的图层

  [复制链接]
发表于 2012-7-26 21:58 | 显示全部楼层 |阅读模式
1明经币
如题,想请大师帮忙写一小段代码:
把选择集中,颜色 1 的对象转到 A 层,颜色 2 的转到 B 层,............................
对象转到改层后,颜色、线宽、线型都随层。

随便帮看一下我改的程序,能不能再优化一下,主要是前置时有点慢。谢谢!
(defun c:2()
(setq ss (ssget"i"))
(command "layer" "m" "2虚线" "c" "251" "" "lw" "0.13" "" "l" "DASHED" "" ""
"draworder"(ssget "x" '((8 . "2虚线")))"" "f")
(if ss(command "change" ss "" "P" "la" "2虚线" "c" "byl" "lw" "byl" "lt" "byl" ""
"draworder"(ssget "x" '((8 . "2虚线")))"" "f"))(princ))


最佳答案

发表于 2012-7-26 21:58 | 显示全部楼层
本帖最后由 gufeng 于 2012-7-28 11:14 编辑
669423907 发表于 2012-7-27 21:40
我改成这样了:
;按色归层(gufeng 2012.07.27)
(defun c:zh(/ COLOR C_LAYER DZB ENAME I SS SubUpd) ...
  1. (defun c:zh (/ COLOR C_LAYER DZB ENAME I SS SubUpd SS_CHANGE)
  2. ;;_根据组码修改图元
  3. ;;_(AT_E:SubUpd (car(entsel)) (list (cons 8 "1") (cons 62 4)))
  4. (defun SubUpd (ename tylst / e_data c n)
  5. (if (= (type ename) 'ENAME)
  6. (setq e_data (entget ename))
  7. )
  8. (foreach n tylst
  9. (if (setq c (assoc (car n) e_data))
  10. (setq e_data (subst n c e_data))
  11. (setq e_data (append e_data (list n)))
  12. )
  13. )
  14. (entmod e_data)
  15. (princ)
  16. )
  17. (setq ss (ssget '((-4 . "<and") (-4 . ">=") (62 . 1) (-4 . "<=") (62 . 255) (-4 . "and>")))) ;_选择颜色从1到255的 需要定义255以外的自行修改
  18. (if ss
  19. (progn
  20. (setq ss_change (ssadd)) ;_定义修改过的选择集 用于最后修改 颜色 线型 线宽 随层
  21. (setq dzb '((1 "0") (8 "2虚线") (2 "螺纹"))) ;_定义颜色与图层对照表
  22. (setq i -1)
  23. (while (setq ename (ssname ss (setq i (1+ i))))
  24. (setq color (cdr (assoc 62 (entget ename)))) ;_获取颜色值
  25. (if (setq color (assoc color dzb)) ;_如果颜色在 对照表dzb 中存在就修改
  26. (progn
  27. (setq c_layer (cadr color)) ;_根据颜色获取到需要转换的图层
  28. (SubUpd ename (list (cons 8 c_layer))) ;_修改图层
  29. (setq ss_change (ssadd ename ss_change)) ;_把图元名添加到修改过的选择集
  30. )
  31. )
  32. )
  33. (if (> (sslength ss_change) 0) ;_如果有修改过的继续修改   线型 线宽 随层
  34. (command "change" ss_change "" "p" "c" "bylayer" "lt" "bylayer" "lw" "bylayer" "") ;_颜色 线型 线宽 随层
  35. )
  36. )
  37. )
  38. (princ)
  39. )

点评

再次非常感谢 gufeng 大师的热情帮助。是我搞错了颜色号。 程序非常好用。谢谢!  发表于 2012-7-28 21:13
回复

使用道具 举报

 楼主| 发表于 2012-7-27 10:24 | 显示全部楼层
无人问津啊!
回复

使用道具 举报

发表于 2012-7-27 10:47 | 显示全部楼层
[图层] 自动修改图层颜色(索引颜色)http://bbs.mjtd.com/thread-93873-1-1.html
改下就好,没下载kaixin的程序
回复

使用道具 举报

 楼主| 发表于 2012-7-27 10:51 | 显示全部楼层
仲文玉 发表于 2012-7-27 10:47
[图层] 自动修改图层颜色(索引颜色)http://bbs.mjtd.com/thread-93873-1-1.html
改下就好,没下载kaixin ...

倒过来咋搞啊?美女!
回复

使用道具 举报

发表于 2012-7-27 11:12 | 显示全部楼层
现在怎么都喜欢悬赏啊?不管自己有币没币都悬,其实只要问题说明清楚,不悬也有很多热心人在帮,不然觉得太假。
回复

使用道具 举报

 楼主| 发表于 2012-7-27 11:34 | 显示全部楼层
soly2006 发表于 2012-7-27 11:12
现在怎么都喜欢悬赏啊?不管自己有币没币都悬,其实只要问题说明清楚,不悬也有很多热心人在帮,不然觉得太 ...

把选择集中,颜色 1 的对象转到 A 层,颜色 2 的转到 B 层,
对象转到改层后,颜色、线宽、线型都随层。

不知还有哪里描述不清的.............
回复

使用道具 举报

发表于 2012-7-27 14:57 | 显示全部楼层
本帖最后由 gufeng 于 2012-7-27 14:59 编辑


  1. ;;_2012年7月27日14时54分34秒 By ls
  2. (defun c:tt (/ COLOR C_LAYER DZB ENAME I SS SubUpd)
  3. ;;_根据组码修改图元
  4. ;;_(AT_E:SubUpd (car(entsel)) (list (cons 8 "1") (cons 62 4)))
  5. (defun SubUpd (ename tylst / e_data c n)
  6. (if (= (type ename) 'ENAME)
  7. (setq e_data (entget ename))
  8. )
  9. (foreach n tylst
  10. (if (setq c (assoc (car n) e_data))
  11. (setq e_data (subst n c e_data))
  12. (setq e_data (append e_data (list n)))
  13. )
  14. )
  15. (entmod e_data)
  16. (princ)
  17. )
  18. (setq ss (ssget '((-4 . "<and") (-4 . ">=") (62 . 1) (-4 . "<=") (62 . 7) (-4 . "and>")))) ;_选择颜色从1到7的
  19. (if ss
  20. (progn
  21. (setq dzb '((1 "A") (2 "B") (3 "C") (4 "自定义1") (5 "自定义2") (6 "自定义3") (7 "自定义4"))) ;_定义颜色与图层对照表
  22. (setq i -1)
  23. (while (setq ename (ssname ss (setq i (1+ i))))
  24. (setq color (cdr (assoc 62 (entget ename)))) ;_获取颜色值
  25. (setq c_layer (cadr (assoc color dzb))) ;_根据颜色获取到需要转换的图层
  26. (SubUpd ename (list (cons 8 c_layer))) ;_修改图层
  27. )
  28. (command "change" ss "" "p" "c" "bylayer" "lt" "bylayer" "lw" "bylayer" "") ;_颜色 线型 线宽 随层
  29. )
  30. )
  31. (princ)
  32. )

回复

使用道具 举报

 楼主| 发表于 2012-7-27 15:43 | 显示全部楼层
非常感谢 gufeng 大师的帮助。手机登录中,晚上再试。
回复

使用道具 举报

 楼主| 发表于 2012-7-27 21:40 | 显示全部楼层
本帖最后由 669423907 于 2012-7-27 21:44 编辑
gufeng 发表于 2012-7-27 14:57

我改成这样了:
;按色归层(gufeng 2012.07.27)
(defun c:zh(/ COLOR C_LAYER DZB ENAME I SS SubUpd)
;;_根据组码修改图元
;;_(AT_E:SubUpd (car(entsel)) (list (cons 8 "1") (cons 62 4)))
(defun SubUpd (ename tylst / e_data c n)
(if (= (type ename) 'ENAME)
(setq e_data (entget ename))
)
(foreach n tylst
(if (setq c (assoc (car n) e_data))
(setq e_data (subst n c e_data))
(setq e_data (append e_data (list n)))
)
)
(entmod e_data)
(princ)
)
(setq ss (ssget '((-4 . "<and") (-4 . ">=") (62 . 1) (-4 . "<=") (62 . 7) (-4 . "and>")))) ;_选择颜色从1到7的
(if ss
(progn
(setq dzb '((1 "0") (8 "2虚线") (2 "螺纹"))) ;_定义颜色与图层对照表
(setq i -1)
(while (setq ename (ssname ss (setq i (1+ i))))
(setq color (cdr (assoc 62 (entget ename)))) ;_获取颜色值
(setq c_layer (cadr (assoc color dzb))) ;_根据颜色获取到需要转换的图层
(SubUpd ename (list (cons 8 c_layer))) ;_修改图层
)
(command "change" ss "" "p" "c" "bylayer" "lt" "bylayer" "lw" "bylayer" "") ;_颜色 线型 线宽 随层
)
)
(princ)
)

上图了,麻烦gufeng大师再帮看看。谢谢你。

提示:
选择对象:
; 错误: DXF 组不正确: (8)

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-16 02:34 , Processed in 0.161170 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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