乐筑天下

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

[编程交流] 所有层的颜色变化

[复制链接]

40

主题

92

帖子

52

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
200
发表于 2022-7-6 08:33:57 | 显示全部楼层 |阅读模式
你好
 
这个lisp是从别人那里收集的,但我需要稍加修改;当我应用命令ColorX时,选择显示的颜色(索引对话框)。选择ok后,我需要在命令行询问select object;这意味着我需要更改颜色选择窗口。
谢谢
文基
 
defun C:ColorX(/文档列)
(vl load com)
(setq doc(vla get activedocument(vlax get acad object)))
(vla startundomark文件)
(mip:图层状态保存)
(if(setq col(acad\U colordlg 7 t))
(更改对象颜色文档列);_col-颜色编号
)
(mip:层状态恢复)
(vla ENDUDOMARK文件)
(普林斯)
)
(princ“\n在命令行中键入ColorX”)
所有层的颜色变化。lsp
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 08:43:51 | 显示全部楼层
像这样的?
 
  1. (defun c:TesT (/ color ss i obj)
  2. (vl-load-com)
  3. ;;; Tharwat 12. Dec. 2011 ;;;
  4. (cond ((not acdoc) (setq acdoc (vla-get-activedocument (vlax-get-acad-object)))))
  5. (if (and (setq color (acad_colordlg 7 t)) (setq ss (ssget "_:L")))
  6.    (progn (vla-startundomark acdoc)
  7.           (repeat (setq i (sslength ss))
  8.             (setq obj (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
  9.             (vla-put-color obj color)
  10.           )
  11.           (vla-endundomark acdoc)
  12.    )
  13.    (princ)
  14. )
  15. (princ)
  16. )
回复

使用道具 举报

4

主题

2143

帖子

2197

银币

限制会员

铜币
-24
发表于 2022-7-6 08:49:41 | 显示全部楼层
请阅读代码发布指南。
回复

使用道具 举报

40

主题

92

帖子

52

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
200
发表于 2022-7-6 08:52:05 | 显示全部楼层
 
 
 
 
 
 
抱歉,无法更改块对象。请检查您的代码。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 08:58:10 | 显示全部楼层
无论如何,看看这个。。。
 
  1. (defun c:TesT (/ color ss i sn obj lst name)
  2. (vl-load-com)
  3. ;;; Tharwat 13. Dec. 2011 ;;;
  4. (cond ((not acdoc) (setq acdoc (vla-get-activedocument (vlax-get-acad-object)))))
  5. (if (and (setq color (acad_colordlg 7 t)) (setq ss (ssget "_:L")))
  6.    (progn (vla-startundomark acdoc)
  7.           (repeat (setq i (sslength ss))
  8.             (setq obj (vlax-ename->vla-object (setq sn (ssname ss (setq i (1- i))))))
  9.             (if (eq (cdr (assoc 0 (entget sn))) "INSERT")
  10.               (vlax-for block (setq blk (vla-item (vla-get-blocks acdoc) (setq name (vla-get-EffectiveName obj))))
  11.                 (if (and (eq :vlax-false (vla-get-isLayout blk))
  12.                          (eq :vlax-false (vla-get-isXref blk))
  13.                          (if (not (member name lst))
  14.                            (setq lst (cons name lst))
  15.                          )
  16.                     )
  17.                   (vlax-for x blk
  18.                     (if (not (eq "AcDbBlockReference" (vla-get-objectname x)))
  19.                       (vla-put-color x color)
  20.                     )
  21.                   )
  22.                 )
  23.               )
  24.               (vla-put-color obj color)
  25.             )
  26.           )
  27.           (vla-regen acdoc acAllViewports)
  28.           (vla-endundomark acdoc)
  29.    )
  30.    (princ)
  31. )
  32. (princ)
  33. )
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 09:05:02 | 显示全部楼层
 
是否要更改所选实体的颜色或层的颜色?
回复

使用道具 举报

10

主题

38

帖子

28

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 09:10:55 | 显示全部楼层
  1. (defun c:aa( / doc bl ss co )
  2.    (PTE:subload-111213-g)
  3.    
  4.    (setq doc (vla-get-activedocument (vlax-get-acad-object))
  5.          bl  (vla-get-blocks doc)
  6.          ss  (PTE:ss->obj(ssget))
  7.          co  (acad_colordlg 256 t)
  8.    )
  9.    
  10.    (foreach ob ss
  11.        (if (= (vla-get-objectname ob) "AcDbBlockReference")
  12.            (PTE:changeC_ ob bl co)
  13.            (vla-put-color ob co)
  14.        )
  15.    )(vla-regen doc acAllViewports)
  16.    (princ)
  17. )(vl-load-com)
  18. (defun PTE:subload-111213-g nil
  19.    ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-;;
  20.    ;;             Sub Function - 01            ;;
  21.    ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-;;
  22.    (defun PTE:ss->obj ( ss / i re )
  23.        (if ss
  24.            (repeat (setq i (sslength ss))
  25.                (setq re (cons (vlax-ename->vla-object (ssname ss (setq i (1- i)))) re))
  26.            )
  27.        )
  28.    )
  29.    
  30.    ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-;;
  31.    ;;             Sub Function - 02            ;;
  32.    ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-;;
  33.    (defun PTE:changeC_ ( obj bl co )
  34.        (vlax-for obj (vla-item bl (vla-get-name obj))
  35.            (if (= (vla-get-objectname obj) "AcDbBlockReference")
  36.                (PTE:changeC_ obj bl co)
  37.                (vla-put-color obj co)
  38.            )
  39.        )
  40.    )
  41. )
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 09:14:43 | 显示全部楼层
伙计们,我不明白为什么需要lisp代码,如果OP只希望实体是特定的颜色,其中颜色属性将不是“Bylayer”,对于块实体来说也一样:你真的不需要代码。用你们编写的代码Besdes将更改块的所有实例,而不仅仅是选定的块实体
 
这就是我要求OP澄清他的要求的原因
 
我认为更改当前指定实体所在层的颜色更可能是OP想要的(或者我认为是这样)
 
也许是这样的
 
  1. (defun  c:test (/ LayerColl e ss lst)
  2. (vl-load-com)
  3. (setq  LayerColl
  4.     (vla-get-Layers
  5.       (vla-get-activedocument (vlax-get-acad-object))
  6.       )
  7.    )
  8. (if (and (setq color (acad_colordlg 7 t))
  9.        (setq ss (ssget)))
  10.    (repeat (sslength ss)
  11.      (setq e (cdr (assoc 8 (entget (ssname ss 0)))))
  12.      (if (not (member e lst))
  13.        (progn
  14.          (vla-put-color (vla-item LayerColl e) color)
  15.          (setq lst (cons e lst))
  16.          )
  17.        )
  18.      (ssdel (ssname ss 0) ss)
  19.      )
  20.    )
  21. )

 
授予所有enities颜色属性为“Bylayer”
回复

使用道具 举报

40

主题

92

帖子

52

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
200
发表于 2022-7-6 09:17:55 | 显示全部楼层
 
 
 
嗨,早上好!!!!!!!
 
(定义c:aa(/doc bl ss co)
(PTE:subload-111213-g)
 
(setq doc(vla get activedocument(vlax get acad object))
bl(vla get blocks doc)
ss(PTE:ss->obj(ssget))
co(acad_colordlg 256 t)
)
 
(foreach ob ss)
(if(=(vla get objectname ob)“AcDbBlockReference”)
(PTE:CHANGE C\ob bl co)
(vla put color ob co)
)
)(vla regen doc acAllViewports)
(普林斯)
)(vl load com)
 
(defun PTE:subload-111213-g零
;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-;;
;;             子功能-01;;
;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-;;
(定义:ss->obj(ss/i re)
(如果ss
(重复(setq i(sslength ss))
(setq re(cons(vlax ename->vla object(ssname ss(setq i(1-i)))re))
)
)
)
 
;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-;;
;;             子功能-02;;
;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-;;
(defun PTE:changeC_(obj bl co)
(用于obj的vlax(vla项目bl(vla get name obj))
(if(=(vla get objectname obj)“AcDbBlockReference”)
(私人股本:CHANGE C_ujBL co)
(vla put color obj co)
)
)
)
)
 
 
谢谢你的代码,做得很好。这个很好用,在再次更改颜色(包括块)后,我需要逐层更改,时间代码在块中不起作用(块颜色无法更改)。
 
再次感谢您的精彩作品
 
文基
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 09:23:28 | 显示全部楼层
 
我被纠正了
 
奇怪的是,如果是这样的话,为什么不直接使用_属性呢?
 
另一个例子---end证明了方法---
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-9 09:02 , Processed in 0.675910 second(s), 72 queries .

© 2020-2025 乐筑天下

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