블럭의 레이어를 변경하는 리습
컨텐츠 정보
- 1,761 조회
- 6 댓글
- 0 추천
- 0 비추천
- 목록
본문
제가 아레어 첨부한 리습은 블럭의 색상을 변경해주는 리습입니다.
이를 수정하여 블럭의 레이어를 변경해주는 리습을 만들고 싶었으나 리습에 대해 하나도 모르는지라…
고수님들 도와주세요.
(defun c:bcol ( / oDocument BlockNameList )
(vl-load-com)
(setq oDocument (vla-get-activedocument (vlax-get-acad-object)))
(setq BlockNameList nil)
(and
(setq Sset (ssget (list (cons 0 "INSERT"))))
(setq col (strcase (getstring "n>> 색상 번호를 입력하세요 ? : ")))
(foreach item (mapcar '(lambda(x) (cdr (assoc 2 (entget x)))) (vl-remove-if 'listp (mapcar 'cadr (ssnamex Sset))))
(if (not (member item BlockNameList)) (setq BlockNameList (cons item BlockNameList)))
)
) ;and
(foreach BlockName BlockNameList (change:colorinblock oDocument BlockName col)) ;col 색
(vla-regen oDocument acallviewports)
(princ)
) ; defun
;==============================================
(defun change:colorinblock ( Document BlockName Color )
(vl-load-com)
(vlax-for item (vla-item (vla-get-blocks Document) BlockName)
(vla-put-color item Color)
(if (eq (vla-get-objectname item) "AcDbBlockReference")
(change:colorinblock Document (vla-get-name item) Color)
) ;if
)
) ; defun
관련자료
Viva_La_Vida님의 댓글
(defun c:r2 ( / s n ss l :Adoc :Blocks :Layers) (vl-load-com) (while (not (setq s (entsel "n레이어를 참조할 객체 선택: ")))) (and s (setq n (cdr (assoc 8 (entget (car s))))) (progn (princ "n레이어를 바꿀 블럭을 선택: ") (or (setq ss (ssget '((0 . "insert")))) (alert "선택한 블럭이 없습니다! ") ) ) (progn (setq l (mapcar '(lambda (e) (cdr (assoc 2 (entget e)))) (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))) ) :Adoc (vla-get-activedocument (vlax-get-acad-object)) :Blocks (vlax-get :Adoc 'Blocks) :Layers (vlax-get :Adoc 'Layers) ) (and (eq 8 (logand 8 (getvar 'undoctl))) (vla-endundomark :Adoc)) (vla-startundomark :Adoc) (vlax-for block :Blocks (if (vl-position (vla-get-name block) l) (vlax-for o block (if (= (vlax-get o 'color) 256) (vlax-put o 'Color (vlax-get (vla-item :Layers (vlax-get o 'Layer)) 'Color)) ) (vlax-put o 'Layer n) ) ) ) (and (eq 8 (logand 8 (getvar 'undoctl))) (vla-endundomark :Adoc)) (vla-regen :Adoc 1) (mapcar 'vlax-release-object (list :Adoc :Blocks :Layers)) ) ) (princ) )
Viva_La_Vida님의 댓글
바꿀레이어를 도면상에서 한면 찍어주고 바꿀블럭을 클릭하면 됩니다. 블럭안에 블럭은 속 레이어 변경 안됩니다.