Aktualnie znalazłem jeszcze taki, zanim @kruszynski podesłal swój kod (którego nie testowałem).
Ten poniżej, działa na wybrane bloki, niestety nie działa na zagnieżdzone.
;ColourByLayer.lsp
(vl-load-com)
(defun C:CBL ( / *error* c_doc cme c_blks ss b_name b_lst)
(defun *error* ( msg )
(if cme (setvar 'cmdecho cme))
(if (and c_doc (= 8 (logand 8 (getvar 'UNDOCTL)))) (vla-endundomark c_doc))
(if (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*EXIT*")) (princ (strcat "\nAn Error : " msg " occurred.")))
(princ)
);_end_*error*_defun
(setq c_doc (vla-get-activedocument (vlax-get-acad-object))
c_blks (vla-get-blocks c_doc)
);_end_setq
(cond ( (/= (getvar 'cmdecho) 0) (setq cme (getvar 'cmdecho)) (setvar 'cmdecho 0)))
(if (and c_doc (= 8 (logand 8 (getvar 'UNDOCTL)))) (vla-endundomark c_doc))
(vla-startundomark c_doc)
(setq ss (ssget ":L" '((0 . "INSERT"))))
(vlax-for blk (vla-get-activeselectionset c_doc)
(setq b_name (vlax-get-property blk (if (vlax-property-available-p blk 'effectivename) 'effectivename 'name)))
(cond ( (not (vl-position b_name b_lst))
(vlax-for obj (vla-item c_blks b_name)
(cond ( (= (vlax-get-property obj 'objectname) "AcDbHatch") (vlax-put-property obj 'color acbylayer))
(t (vlax-put-property obj 'color acbylayer))
);end_cond
);end_for
(setq b_lst (cons b_name b_lst))
)
);end_cond
(vla-update blk)
);end_for
(vla-regen c_doc acAllViewports)
(if (and c_doc (= 8 (logand 8 (getvar 'UNDOCTL)))) (vla-endundomark c_doc))
(if cme (setvar 'cmdecho cme))
(princ)
);_end_defun