-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathblockColor.lsp
91 lines (84 loc) · 2.46 KB
/
blockColor.lsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
; Credit: http://www.mjtd.com/thread-74564-1-1.html
(defun c:blockColor ()
(blockColorSelectionSet nil nil nil)
(princ)
)
(defun blockColorSelectionSet (ss blkColor skipColorPrompt / blks i obj blkNames)
(vl-load-com)
(princ "\n")
(defun *error* (msg)
(if (not (member msg '("Function cancelled" "quit / exit abort" "函数已取消")))
(princ (strcat "Error: " msg "\n"))
)
(princ)
)
(if (null ss)
(setq ss (ssget "_:L" '((0 . "insert"))))
)
(if ss
(progn
; Set default value to blkColor
(if (null blkColor)
(setq blkColor 1)
)
(if (null skipColorPrompt)
(setq blkColor (acad_colordlg blkColor))
)
(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)))))
(chBlockColor blks obj blkColor)
)
)
)
(princ)
)
(defun chBlockColor (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 blkNames))
(progn
(setq blkNames (cons blkName blkNames))
(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
; TODO: doesn't has property extension line
(vl-catch-all-apply 'vla-put-ExtensionLineColor (list x color))
(if
(setq blkName (assoc 2
(entget (vlax-vla-object->ename x))
)
)
(vlax-for x (vla-item blks (cdr blkName))
; TODO: avoid locked layer
(vl-catch-all-apply 'vla-put-color (list x color))
)
)
)
(if (wcmatch oName "*Dimension,AcDbFcf")
(vla-put-TextColor x color)
)
)
)
((= oName "AcDbBlockReference")
(chBlockColor blks x color)
)
)
(vla-put-color x color)
)
)
)
(vla-UpDate obj)
(princ)
)