明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 799|回复: 5

[提问] 如下代码可以把所有图快变成8号色,但是把图层全部设置成了dxt图层,请问如何不改...

[复制链接]
发表于 2020-5-22 23:39 | 显示全部楼层 |阅读模式
本帖最后由 yangchao2005090 于 2020-5-22 23:40 编辑

如下代码可以把所有图快变成8号色,但是把图层全部设置成了dxt图层,请问如何不改变原始图层
  1. (Defun c:t2 (/ ss ss1 ss2  n ex ext color layer i  colot layer)
  2.   ;; 主程序
  3.   (vl-load-com)
  4.   (setq color 8 layer "dxt")
  5.   (if (=(tblsearch "layer" layer)nil)(progn
  6.   (command "layer" "N" layer "c" color layer "")));;如果没有dxt层就创建新的dxt层
  7.   (princ "\n选要变更颜色的图形: ")
  8.   (setq ss(ssget))
  9.   (setq n (sslength ss))
  10.   (setq i 0)
  11.   (setq ss1(ssadd))
  12.   (setq ss2(ssadd))
  13.   (while (< i n)
  14.   (setq ex (ssname ss i))
  15.   (setq ext (cdr(assoc 0 (entget ex))))
  16.     (if (= ext "INSERT") (progn (setq ss1(ssadd ex ss1))));;创建一个新的选集,只包含图块
  17.     (if (/= ext "INSERT") (progn (setq ss2(ssadd ex ss2))));;创建一个新的选集,包含除了块以外的所有图形
  18.    (setq i(+ i 1)))
  19.   (sub_block ss1)
  20.   (sub_xxx ss2 layer color)
  21.   (princ)
  22.   )
  23. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  24. ;;子程序1
  25. (defun sub_xxx(ss2 layer color / nxt et i n2)
  26.   (setq n2 (sslength ss2))
  27.   (setq i 0)
  28.   (while (< i n2)
  29.   (setq et (ssname ss2 i))
  30.   (setq nxt(entget et))
  31.   (setq nxt (subst (cons 8 layer)(assoc 8 nxt) nxt ));;变更图层
  32.   (setq nxt (subst (cons 62 256)(assoc 62 nxt) nxt ));;改变颜色随层
  33.   (entmod nxt)
  34.   (setq i(+ i 1))))

  35.   
  36.   
  37. ;;子程序2
  38.   (defun sub_block(ss1 / i bolcks vn n1 )
  39.     (setq n1 (sslength ss1))
  40. ;;;  (setq ss1 (vl-catch-all-apply 'ssget '(((0 . "INSERT")))))
  41. ;;;  (cond ((or (vl-catch-all-error-p ss1) (null ss1)) (vl-exit-with-value 0)))
  42.   (setq i 0
  43.         *AcadDocument* (vla-get-activeDocument (vlax-get-acad-object))
  44.          blocks        (vla-get-blocks *AcadDocument*)
  45.   )
  46.   (repeat n1
  47.     (setq vn (vlax-ename->vla-object (ssname ss1 i))
  48.           i  (1+ i))
  49.     ;; 防止出错 .
  50.     (sub_Fun vn)
  51.     )
  52.   (prin1)
  53. )


  54.   ;; 子程序2-1
  55.   (Defun sub_Fun (vn)
  56.     (vla-put-color vn color)
  57.     (vla-put-layer vn layer)
  58.     (vlax-for ent (vla-item blocks (vla-get-name vn))
  59.       (vla-put-color ent color)
  60.       (vla-put-layer ent layer)
  61.       (if (= (vla-get-objectname ent) "AcDbBlockReference")
  62. (sub_Fun ent)
  63.       )
  64.     )
  65.   )

代码来源于本论坛,附件内容一样

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2020-5-23 09:31 | 显示全部楼层
  1. [code=lisp](Defun c:t2 (/ ss ss1 ss2  n ex ext color layer i  colot layer)
  2.   ;; 主程序
  3.   (vl-load-com)
  4.   (setq color 8 layer "dxt")
  5.   (if (=(tblsearch "layer" layer)nil)(progn
  6.   (command "layer" "N" layer "c" color layer "")));;如果没有dxt层就创建新的dxt层
  7.   (princ "\n选要变更颜色的图形: ")
  8.   (setq ss(ssget))
  9.   (setq n (sslength ss))
  10.   (setq i 0)
  11.   (setq ss1(ssadd))
  12.   (setq ss2(ssadd))
  13.   (while (< i n)
  14.   (setq ex (ssname ss i))
  15.   (setq ext (cdr(assoc 0 (entget ex))))
  16.     (if (= ext "INSERT") (progn (setq ss1(ssadd ex ss1))));;创建一个新的选集,只包含图块
  17.     (if (/= ext "INSERT") (progn (setq ss2(ssadd ex ss2))));;创建一个新的选集,包含除了块以外的所有图形
  18.    (setq i(+ i 1)))
  19.   (sub_block ss1)
  20.   (sub_xxx ss2 layer color)
  21.   (princ)
  22.   )
  23. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  24. ;;子程序1
  25. (defun sub_xxx(ss2 layer color / nxt et i n2)
  26.   (setq n2 (sslength ss2))
  27.   (setq i 0)
  28.   (while (< i n2)
  29.   (setq et (ssname ss2 i))
  30.   (setq nxt(entget et))
  31.   ;(setq nxt (subst (cons 8 layer)(assoc 8 nxt) nxt ));;变更图层
  32.   (setq nxt (subst (cons 62 256)(assoc 62 nxt) nxt ));;改变颜色随层
  33.   (entmod nxt)
  34.   (setq i(+ i 1))))

  35.   
  36.   
  37. ;;子程序2
  38.   (defun sub_block(ss1 / i bolcks vn n1 )
  39.     (setq n1 (sslength ss1))
  40. ;;;  (setq ss1 (vl-catch-all-apply 'ssget '(((0 . "INSERT")))))
  41. ;;;  (cond ((or (vl-catch-all-error-p ss1) (null ss1)) (vl-exit-with-value 0)))
  42.   (setq i 0
  43.         *AcadDocument* (vla-get-activeDocument (vlax-get-acad-object))
  44.          blocks        (vla-get-blocks *AcadDocument*)
  45.   )
  46.   (repeat n1
  47.     (setq vn (vlax-ename->vla-object (ssname ss1 i))
  48.           i  (1+ i))
  49.     ;; 防止出错 .
  50.     (sub_Fun vn)
  51.     )
  52.   (prin1)
  53. )


  54.   ;; 子程序2-1
  55.   (Defun sub_Fun (vn)
  56.     (vla-put-color vn color)
  57.    ; (vla-put-layer vn layer);;变更图层
  58.     (vlax-for ent (vla-item blocks (vla-get-name vn))
  59.       (vla-put-color ent color)
  60.       ;(vla-put-layer ent layer);;变更图层
  61.       (if (= (vla-get-objectname ent) "AcDbBlockReference")
  62. (sub_Fun ent)
  63.       )
  64.     )
  65.   )

[/code]
 楼主| 发表于 2020-5-23 10:50 | 显示全部楼层

可以的,谢谢,还想请教一下,想快速删掉附件中不同图块内的填充可以实现吗

本帖子中包含更多资源

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

x
 楼主| 发表于 2020-5-23 10:51 | 显示全部楼层

可以的,谢谢,还想请教一下,想快速删掉附件中不同图块内的填充可以实现吗
 楼主| 发表于 2020-7-17 07:57 | 显示全部楼层

谢谢你,可以的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-20 06:30 , Processed in 0.205548 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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