[分享]改所有圖元為單一顏色
+8
白宗禮
chengshunyi
as688633
rickyyang
長陳
wateraustin
shackle_2005
LUCAS_LAI
12 posters
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論
第1頁(共1頁)
[分享]改所有圖元為單一顏色
;;只改變圖元顏色,不改變圖層顏色
;;清楚了解AUTOCAD模型是由圖塊組成
;;即模型空間,圖紙空間皆為圖塊
[程式下載網址 回覆可見]
;;清楚了解AUTOCAD模型是由圖塊組成
;;即模型空間,圖紙空間皆為圖塊
[程式下載網址 回覆可見]
- 代碼:
(vl-load-com)
(defun C:CH_COLOR_LAI (/ ATT COL COLOROBJ COLUMNS
DOC ENT1 HOLDECHO N N1 NAME
OBJ ROWS SS X
)
;;; 改MTEXT顏色
;;; by Luis Esquivel - http://www.draftteam.com
;;; function to scan a mtext and make the color uniform
;;; (put-uniform-mtext-color (vlax-ename->vla-object (car (entsel))) 2)
(defun PUT-UNIFORM-MTEXT-COLOR (VLA_MTEXT COLORNUM /
CONT ENAME FLAG I
LET TXT1 TXTSTR
)
;;By LUCAS_LAI "ACAD_PROXY_ENTITY"
(setq ENAME (vlax-vla-object->ename VLA_MTEXT))
(setq TXTSTR "")
(foreach X (entget ENAME)
(if (or (= (car X) 3)
(= (car X) 1)
(= (car X) 304)
)
(setq TXTSTR (strcat TXTSTR (cdr X)))
)
)
;;====================================================
(setq TXT1 "")
(setq CONT 1)
(if (/= TXTSTR "")
(repeat (strlen TXTSTR)
(setq LET (substr TXTSTR CONT 1))
(if (= LET "\")
(progn
(if (= (substr TXTSTR (+ CONT 1) 1) "C")
(progn
(setq I (+ CONT 2))
(while (/= (substr TXTSTR I 1) ";")
(setq I (1+ I))
)
(setq TXT1 (strcat TXT1
"\\C"
(itoa COLORNUM)
";"
(substr TXTSTR (+ I 1) 1)
)
)
(setq CONT (+ I 2))
)
(setq FLAG t)
)
)
(progn
(setq TXT1 (strcat TXT1 LET))
(setq CONT (1+ CONT))
)
)
(if FLAG
(progn
(setq TXT1 (strcat TXT1 LET))
(setq CONT (1+ CONT))
(setq FLAG NIL)
)
)
)
)
(vla-put-textstring VLA_MTEXT TXT1)
(vla-put-color VLA_MTEXT COLORNUM)
)
(defun DO_IT (BLK)
(vla-put-color BLK COL)
)
(setq HOLDECHO (getvar "cmdecho"))
(setvar "cmdecho" 0)
(vl-cmdf "_.undo" "BE")
(if (setq COL (acad_colordlg 7)) ;選顏色
(progn
(vl-cmdf "_.-LAYER" "U" "*" "")
(setq COLOROBJ (vla-getinterfaceobject
(vlax-get-acad-object)
(strcat "AutoCAD.AcCmColor."
(substr (getvar "acadver") 1 2)
)
)
)
(vla-put-colorindex COLOROBJ COL)
(setq
DOC (vla-get-activedocument (vlax-get-acad-object))
)
;|改圖層顏色
(vlax-for OBJ (vla-get-layers DOC)
(DO_IT OBJ)
)
|;
;;把"ACAD_PROXY_ENTITY"炸開
(setvar 'QAFLAGS 5)
(if (setq
SS (ssget "_X"
(list '(0 . "ACAD_PROXY_ENTITY")
(cons 410 (getvar "CTAB"))
)
)
)
(vl-cmdf "_.explode" SS "")
)
(setvar 'QAFLAGS 0)
;;遍壢圖塊
(vlax-for BLK (vla-get-blocks DOC) ;圖塊定義
(vlax-for OBJ BLK ;改圖塊參考顏色
(if (and (= (vla-get-objectname OBJ) "AcDbBlockReference")
(= (vla-get-hasattributes OBJ) :vlax-true)
)
(mapcar '(lambda (X) ;改圖塊參考屬性顏色
(setq ATT (vlax-variant-value ((eval X) OBJ)))
(if (safearray-value ATT)
(foreach ENT1 (vlax-safearray->list ATT)
(DO_IT ENT1)
)
)
)
'(vla-getattributes vla-getconstantattributes)
)
)
(DO_IT OBJ)
(setq NAME (vla-get-objectname OBJ))
;;處理MTEXT,MLEADER中文字
(if (or (= NAME "AcDbMText")
(and
(= NAME "AcDbMLeader")
(= (vla-get-stylename OBJ) "Standard")
)
)
(PUT-UNIFORM-MTEXT-COLOR OBJ COL)
)
;;處理MLEADER中leaderlinecolor
(if (= NAME "AcDbMLeader")
(vl-catch-all-error-p
(vl-catch-all-apply
'vla-put-leaderlinecolor
(list OBJ COL)
)
)
)
;;處理HATCH中SOLID--漸層色
(if (and (= NAME "AcDbHatch")
(not
(vl-catch-all-error-p
(vl-catch-all-apply
'vla-get-gradientcolor1
(list OBJ)
)
)
)
)
(progn
(vla-put-gradientcolor1 OBJ COLOROBJ)
(vla-put-gradientcolor2 OBJ COLOROBJ) ;漸層底色
)
)
;; 處理表格顏色(只處理了2種)
;; 表格還有很多種顏色
;; SetBackgroundColor (2)
;; SetBackgroundColorNone (2)
;; SetCellBackgroundColor (3)
;; SetCellBackgroundColorNone (3)
;; SetCellContentColor (3)
;; SetCellGridColor (4)
;; SetContentColor (2)
;; SetContentColor2 (4)
;; SetGridColor (3)
;; SetGridColor2 (4)
(if (= NAME "AcDbTable")
(progn
(vla-put-regeneratetablesuppressed OBJ :vlax-true)
(setq COLUMNS (vla-get-columns OBJ))
(setq ROWS (vla-get-rows OBJ)
N 0
N1 0
)
(repeat COLUMNS
(repeat ROWS
(vla-setcellcontentcolor OBJ N N1 COLOROBJ) ;改內容色
(setq N (1+ N))
)
(setq N 0
N1 (1+ N1)
)
)
;;改框色
;;使框色可見
(vla-setgridvisibility
OBJ
(+ achorzbottom achorzinside achorztop
acvertinside acvertleft acvertright
)
(+ acdatarow acheaderrow actitlerow)
:vlax-true
)
;;再改框色
(vla-setgridcolor
OBJ
(+ achorzbottom achorzinside achorztop
acvertinside acvertleft acvertright
)
(+ acdatarow acheaderrow actitlerow)
COLOROBJ
)
(vla-put-regeneratetablesuppressed OBJ :vlax-false)
)
)
;;處理尺寸顏色(可能有欠一些)
(if (or (and (> (strlen NAME) 8)
(= "Dimension"
(substr NAME (- (strlen NAME) 8))
)
)
(= NAME "AcDbLeader")
)
(progn
(vl-catch-all-error-p
(vl-catch-all-apply 'vla-put-textcolor (list OBJ COL))
)
(vl-catch-all-error-p
(vl-catch-all-apply
'vla-put-extensionlinecolor
(list OBJ COL)
)
)
(vl-catch-all-error-p
(vl-catch-all-apply
'vla-put-dimensionlinecolor
(list OBJ COL)
)
)
(vl-catch-all-error-p
(vl-catch-all-apply
'vla-put-textfillcolor
(list OBJ COL)
)
)
)
)
)
)
;;移動一下表格框色才會改變
(if (setq
SS (ssget "_X"
(list '(0 . "ACAD_TABLE")
(cons 410 (getvar "CTAB"))
)
)
)
(progn
(vl-cmdf "_.MOVE" SS "" "NON" "0,0" "NON" "@0.001,0")
(vl-cmdf "_.MOVE" SS "" "NON" "0,0" "NON" "@-0.001,0")
)
)
(vlax-release-object COLOROBJ)
(vlax-release-object DOC)
(vl-cmdf "_.REGENALL")
(vl-cmdf "_.undo" "e")
(setvar "cmdecho" HOLDECHO)
)
)
(princ)
)
(princ
"\nType CH_COLOR_LAI 改所有圖元為單一顏色,By LUCAS_LAI"
)
(princ)
Tiger&蘋果爸, leechingting and Cher like this post
回復: [分享]改所有圖元為單一顏色
感謝, 測試
shackle_2005- 初級會員
- 文章總數 : 232
年齡 : 53
來自 : 台中
職業 : 程式設計
愛好 : 音樂
個性 : 隨和
使用年資 : 10 年
使用版本 : 2013
積分 : 3
經驗值 : 6715
威望值 : 361
注冊日期 : 2010-09-20
回復: [分享]改所有圖元為單一顏色
學習 vsual-lisp color
wateraustin- 一般會員
- 文章總數 : 71
年齡 : 58
來自 : 台南
職業 : soho 3d,2d 模具
愛好 : pop music,movie
個性 : very good EQ
使用年資 : 30
使用版本 : 2011
經驗值 : 5464
威望值 : 15
注冊日期 : 2010-09-16
回復: [分享]改所有圖元為單一顏色
工作剛好有需要用到,感謝分享
長陳- 專屬會員
- 文章總數 : 36
年齡 : 43
來自 : 高雄
職業 : 工程
愛好 : cad
個性 : ok
使用年資 : 2
使用版本 : 2017
經驗值 : 5261
威望值 : 0
注冊日期 : 2010-10-24
回復: [分享]改所有圖元為單一顏色
感謝大大無私地分享......感恩
rickyyang- 專屬會員
- 文章總數 : 196
年齡 : 45
來自 : 台北
職業 : 營建暨室內裝修工程管理
愛好 : 喜愛黃金獵犬、哈士奇
個性 : 誠信、正義、穩健
使用年資 : 17
使用版本 : AutoCAD 2023
經驗值 : 4548
威望值 : 36
注冊日期 : 2014-11-11
回復: [分享]改所有圖元為單一顏色
感謝 分享
as688633- 一般會員
- 文章總數 : 16
年齡 : 47
來自 : taipei
職業 : 繪圖員
愛好 : 看書
個性 : 積極
使用年資 : 10
使用版本 : 2020
經驗值 : 3147
威望值 : 0
注冊日期 : 2016-05-10
回復: [分享]改所有圖元為單一顏色
感謝分享...
chengshunyi- 高級會員
- 文章總數 : 66
年齡 : 58
來自 : 台北市文山區
職業 : 建築規劃
愛好 : 散步
個性 : 溫和
使用年資 : 15
使用版本 : 2018
經驗值 : 5650
威望值 : 97
注冊日期 : 2010-07-04
回復: [分享]改所有圖元為單一顏色
測試 看看
virage7676- 一般會員
- 文章總數 : 28
年齡 : 47
來自 : 台中市北屯區
職業 : 自由業
愛好 : 慢跑
個性 : 寡言
使用年資 : 10
使用版本 : CAD2006
經驗值 : 4572
威望值 : -9
注冊日期 : 2012-08-04
回復: [分享]改所有圖元為單一顏色
不知是否可以只對選取改色就好
virage7676- 一般會員
- 文章總數 : 28
年齡 : 47
來自 : 台中市北屯區
職業 : 自由業
愛好 : 慢跑
個性 : 寡言
使用年資 : 10
使用版本 : CAD2006
經驗值 : 4572
威望值 : -9
注冊日期 : 2012-08-04
回復: [分享]改所有圖元為單一顏色
感謝分享~~
leechingting- 一般會員
- 文章總數 : 38
年齡 : 47
來自 : 七堵區
職業 : 繪圖員
愛好 : auto cad
個性 : 開朗
使用年資 : 10年以上
使用版本 : 2017
經驗值 : 1424
威望值 : 6
注冊日期 : 2021-06-02
回復: [分享]改所有圖元為單一顏色
感謝分享~~~~
hoodpinrh0829- 一般會員
- 文章總數 : 76
年齡 : 42
來自 : 桃園
職業 : 板金
愛好 : 到處走走
個性 : 內向
使用年資 : 5年以上
使用版本 : 2019
經驗值 : 4322
威望值 : 0
注冊日期 : 2014-02-27
回復: [分享]改所有圖元為單一顏色
感謝分享!借來lisp程式測試看看
Cher- 專屬會員
- 文章總數 : 107
年齡 : 46
來自 : 新竹
職業 : 建築工程
愛好 : 畫畫
個性 : 沈默寡言
使用年資 : 新手初學
使用版本 : Auto CAD 2022
經驗值 : 1255
威望值 : 24
注冊日期 : 2022-11-04
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論
第1頁(共1頁)
這個論壇的權限:
您 無法 在這個版面回復文章