只需一步,快速开始
别人做过来的块,很不规范,块里的对象颜色没有随层,块也没有定义到0层,尤其是块里套块的情况
现在求一下这样的小程序:
1.保留目前块所在的层,但是块的定义是在0层定义的
2.块中所有对象的颜色都随层
3.块里套块情况也要处理
总之,打个比方,经过处理后,一个块还是保留它目前的层,比如"家具层",这个块的颜色已经都变成"家具层",的颜色8
我觉得这样的程序挺实用的,不知道说清楚没有,谢谢
使用道具 举报
是 vlax-ename->vla-object 吧,(vl-load-com)
;;网站的网页程序的关系,直接复制代码有问题,重发一下;;-------------------------------------------------------------------(defun c:ChColor (/ SS BLKS I BNLst) (princ "\n选择要修改颜色的对象: ") (if (and (setq SS (ssget)) (or $ChColor$ (setq $ChColor$ 7)) (setq $ChColor$ (acad_colordlg $ChColor$)) ) (progn (setq BLKS (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))) (defun ChColor (OBJ / oName BlkName) (setq oName (vla-get-ObjectName OBJ)) (cond ((wcmatch oName "*Dimension,AcDbLeader,AcDbFcf") (vla-put-DimensionLineColor OBJ $ChColor$) (if (wcmatch oName "*Dimension") (progn (vla-put-ExtensionLineColor OBJ $ChColor$) (if (setq BlkName (assoc 2 (entget (vlax-vla-object->ename OBJ)))) (vlax-for OBJ (vla-item Blks (cdr BlkName)) (vla-put-color OBJ $ChColor$) ) ) ) ) (if (wcmatch oName "*Dimension,AcDbFcf") (vla-put-TextColor OBJ $ChColor$) ) ) ((= oName "AcDbBlockReference") (setq BlkName (vla-get-name OBJ)) (if (not (member BlkName BNLst)) (progn (setq BNLst (cons BlkName BNLst)) (vlax-for X (vla-item Blks BlkName) (ChColor X) ) ) ) (if (= (vla-get-HasAttributes OBJ) :vlax-true) (foreach X (vlax-invoke OBJ 'getattributes) (vla-put-color X $ChColor$) ) ) ) ) (vla-put-color obj $ChColor$) ) (repeat (setq I (sslength SS)) (setq OBJ (vlax-ename->vla-object (ssname SS (setq I (1- I))))) (ChColor OBJ) ) ) ) (princ))
参考29楼的程序,自己修改一下
http://www.mjtd.com/bbs/dispbbs.asp?boardid=3&replyid=118821&id=72404&page=1&skin=0&landlord=0&Star=3
可能是未加载函数
(setq SS (lt:ssget '("\n选择要修改颜色的对象: ")))->
(setq SS (ssget))
;;改块的
(defun c:ChBlkColor (/ ChBlkColor SS blks I Obj BnLst) (defun ChBlkColor (Blks Obj Color / BlkName oName) (if (and (= (vla-get-ObjectName obj) "AcDbBlockReference") (= (vla-get-HasAttributes obj) :vlax-true) ) (foreach x (vlax-invoke obj 'getattributes) (vla-put-color x Color) ) ) (setq BlkName (vla-get-name obj)) (if (not (member BlkName bnlst)) (progn (setq bnlst (cons BlkName BnLst)) (vlax-for X (vla-item Blks BlkName) (setq oName (vla-get-ObjectName X)) (cond ((wcmatch oName "*Dimension,AcDbLeader,AcDbFcf") (vla-put-DimensionLineColor X Color) (if (wcmatch oName "*Dimension") (progn (vla-put-ExtensionLineColor X Color) (if (setq BlkName (assoc 2 (entget (vlax-vla-object->ename X)))) (vlax-for X (vla-item Blks (cdr BlkName)) (vla-put-color X Color) ) ) ) ) (if (wcmatch oName "*Dimension,AcDbFcf") (vla-put-TextColor X Color) ) ) ((= oName "AcDbBlockReference") (ChBlkColor Blks X Color) ) ) (vla-put-color X Color) ) ) ) (vla-UpDate obj) ) (if (and (setq ss (ssget '((0 . "insert")))) (or $ChBlkColor$ (setq $ChBlkColor$ 7)) (setq $ChBlkColor$ (acad_colordlg $ChBlkColor$)) ) (progn (setq blks (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))) (repeat (setq i (sslength ss)) (setq obj (vlax-ename->vla-object (ssname ss (setq i (1- i))))) (ChBlkColor Blks Obj $ChBlkColor$) ) ) ) (princ))
本帖7 、8楼没用任何自定义函数啊!!
怪事!!为什么我用没问题??(问题好像有一个,就是在 UpDate,空了修改)
您需要 登录 才可以下载或查看,没有账号?注册
本版积分规则 发表回复 回帖后跳转到最后一页
小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 ) ©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途
GMT+8, 2025-2-21 03:34 , Processed in 0.195090 second(s), 27 queries , Gzip On.
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.