프로그램
캐드 분류

블럭의 레이어를 변경하는 리습

컨텐츠 정보

  • 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

관련자료

댓글 6 / 1 페이지

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님의 댓글

바꿀레이어를 도면상에서 한면 찍어주고 바꿀블럭을 클릭하면 됩니다. 블럭안에 블럭은 속 레이어 변경 안됩니다.

parkha12님의 댓글

와! 너무 감사합니다. 잘 사용하겠습니다. 그런데 사용을 해보니 색은 기존의 색을 따라가더라고요. 혹시 ByLayer로도 변경할 수 있나요?

헐 초보님의 댓글

우와 이런것도 수정하시나요? 대단하시네요 저도 캐드 좀 했다고 생각했는데 이건 뭐 구멍가게랑 마트 수준이네요

위에 쓰신 글이 뭔지도 모르고 그냥 감탄만 하고 갑니다.

이시려님의 댓글

-.블럭 잡는것은 문제가 아닌데 일정 블럭 한개를 깨지 않고 bylayer(도면층별), bylayer(도면층별) 할수 있는 방법은 없을까 해서요^^ -.현재는 블럭을 깨서 bylayer(도면층별) 하고, 또는 블럭 색상을 바꾸고 싶으면 또 깨서 byblock(블럭별) 일일이 바꾸면서 블럭을 잡고 있습니다. -.블럭 잡는것은 문제가 아닌데 일정 블럭 한개를 깨지 않고 bylayer(도면층별), bylayer(도면층별) 할수 있는 방법은 없을까 해서요^^

리네리님의 댓글

안녕하세요!! 덕분에 좋은 리습을 찾아 너무 감사합니다.

한가지 문의사항이 있는데요. 지금 이 글 아래에도 달려 있는데.
전체 7,670 / 1 페이지
RSS
번호
제목
이름

최근글


새댓글


알림 0