제가 아레어 첨부한 리습은 블럭의 색상을 변경해주는 리습입니다.
이를 수정하여 블럭의 레이어를 변경해주는 리습을 만들고 싶었으나 리습에 대해 하나도 모르는지라…
고수님들 도와주세요.
(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
(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)
)
바꿀레이어를 도면상에서 한면 찍어주고 바꿀블럭을 클릭하면 됩니다.
블럭안에 블럭은 속 레이어 변경 안됩니다.
와! 너무 감사합니다. 잘 사용하겠습니다.
그런데 사용을 해보니 색은 기존의 색을 따라가더라고요.
혹시 ByLayer로도 변경할 수 있나요?
우와 이런것도 수정하시나요? 대단하시네요
저도 캐드 좀 했다고 생각했는데 이건 뭐 구멍가게랑 마트 수준이네요
위에 쓰신 글이 뭔지도 모르고 그냥 감탄만 하고 갑니다.
-.블럭 잡는것은 문제가 아닌데 일정 블럭 한개를 깨지 않고 bylayer(도면층별), bylayer(도면층별) 할수 있는 방법은 없을까 해서요^^
-.현재는 블럭을 깨서 bylayer(도면층별) 하고, 또는 블럭 색상을 바꾸고 싶으면 또 깨서 byblock(블럭별)
일일이 바꾸면서 블럭을 잡고 있습니다.
-.블럭 잡는것은 문제가 아닌데 일정 블럭 한개를 깨지 않고 bylayer(도면층별), bylayer(도면층별) 할수 있는 방법은 없을까 해서요^^
안녕하세요!! 덕분에 좋은 리습을 찾아 너무 감사합니다.