ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AutoCAD 리습 - 캐드 도면 레이어 변경, 색상 변경, 문자열 변경... 속성 편집 수정 활용 가능한 리습
    KiKO LISP 2023. 4. 20. 15:04
    728x90

    레이어 변경, 색상 변경, 문자열 변경등 각 객체의 속성을 편집하고 수정하는데 활용 가능한 리습입니다.
    단순한 코드의 조합만으로도 다양하게 응용이 가능한 소스입니다.

    캐드를 사용하고 리습을 다루게 된다면 반복적으로 사용하는 업무를 단순히 처리하게 하는데 많은 도움이 된다.
    리습을 처음 배워보고자하는 사람들에 짧은 지식이나마 나누고자 포스팅 합니다.
    기본적인 리습 로드 방법과 구조는 아는 단계라고 생각하고 작성된 글이니 내용이 좀 부실해도 이해 바랍니다.
    우선 오늘 알아볼 내용은 DXF Code라는 것입니다.
     
    DXF Code 라고하는 것은

    DXF™ 형식은 AutoCAD ® 도면 파일에 포함되어 있는 모든 정보를
    태그가 지정된 데이터로 표현한 파일 형식입니다.
    태그가 지정된 데이터란 그룹 코드라고 하는 정수가 앞에 붙어 있는
    파일 내의 각 데이터 요소를 의미합니다.
    그룹 코드의 값은 다음에 나오는 데이터 요소의 유형을 나타냅니다.
    또한, 이 값은 주어진 객체 또는 레코드의 유형에 대한 데이터 요소의 의미도 나타냅니다.
    사실상, 도면 파일의 모든 사용자 지정 정보는 DXF 형식으로 나타낼 수 있습니다.

    https://help.autodesk.com/view/ACD/2023/KOR/?guid=GUID-3F0380A5-1C15-464D-BC66-2C5F094BCFB9 
     
    라고 오토데스크는 설명합니다. 자세한 설명은 위의 링크를 이용하시기 바랍니다.
    어렵습니다. 뭔소린지 이해하기 힘든 언어인것도 같습니다.
    하지만 제일 마지막 문장에서 말하듯이 "도면 파일의 모든 사용자 지정 정보는 DXF 형식으로 나타낼 수 있다"
    사실 이 부분이 주목할 부분이고 오늘 같이 알아볼 부분입니다.
     
    그럼 실제 도면 파일의 DXF 코드를 눈으로 한번 확인해 보겠습니다.
    아래 코드를 캐드의 명령창에 복사해서 붙여 넣고 하나의 객체를 선택해 보겠습니다.
    (entget (car (entsel)))

    저는 "0" 레이어의 빨간색 선을 선택해 봤습니다.
     (0 . "LINE") : 선
     (8 . "0")    : 레이어
     (62 . 1)     : 빨간색

    시작점과 끝점, 기타 등등 위와 같이 선 객체의 그룹코드와 값을 확인 할 수 있습니다.
    그럼 이 코드를 가지고 뭘 할수 있을까요.
    우리는 이 코드를 이용해서 객제의 속성을 재 정의 할 수도 있고 새로운 객체를 생성도 가능합니다.
    아래는 색상을 바꾸는 단순한 리습입니다.

    (command "CHANGE" (entsel) "" "P" "C" "1" "")

    간단합니다.

    이 명령을 DXF Code를 이용해 변경해 보겠습니다.

    (setq obj_d  (entget (car (entsel))))
    (setq valu_o (assoc 62 obj_d))
    (entmod (subst (cons 62 3) valu_o obj_d))

    간단하지 않습니다.
    한줄이면 되던 것이 좀 길게 늘어 났네요.
    그런데 왜 이런걸 쓰는걸까요?...왜 그럴까요?
    사실 하나만 바꾸는 거라면 처음이 간다하겠죠.
    하지만 다양한 조건에 다양한 개체를 바꾸어야 한다면 일일이 "command" 명령으로 코딩하는건
    매우 비효율적일 겁니다.

    우선 코드를 설명 드리겠습니다.
    (setq obj_d  (entget (car (entsel))))
    객체를 입력받아 dxf 코드를 저장합니다.
    (setq valu_o (assoc 62 obj_d))
    입력 받은 객체에서 색상과 관련된 그룹코드(62)와 값을 가져옵니다.
    (entmod (subst (cons 62 3) valu_o obj_d))
    그룹코드(62)에 새로운 값(3)을 넣어 코드를 재 정의 합니다.
    참 쉽죠.
     
    각각의 그룹코드와 값을 함수화 시키면 다양하게 활용이 가능합니다.
    색상, 레이어, 라인타입, 폰트 등등..

    이제 이 코드를 함수화하여 다른 리습에 이용이 가능하게 변경해 보겠습니다.

    (defun KiKO_DXF_Code_Change_X (ss c_code c_valu / cn obj obj_o)
      (setq cn 0)
      (repeat (sslength ss)
        (setq obj (entget (ssname ss cn)))
        (if (setq obj_o (assoc c_code obj))
          (entmod (subst (cons (car obj_o) c_valu) obj_o obj))
          (entmod (append obj (list (cons c_code c_valu))))
        )
        (setq cn (1+ cn))
      )
    )

    함수는 이렇습니다.
    객체와 변경할 그룹코드와 값을 입력하면 변경해 주는 단순한 리습입니다.
    (KiKO_DXF_Code_Change_X (ssget) 62 1)

    그럼 한번 더 응용해 볼까요.

    이번에는 객체의 레이어를 같은 레이어로 변경하고 선택하고 색상을 ByLayer로 변경해 보겠습니다.
    참고로 색상 번호에서 ByLayer는 256번이고 ByBlock은 0번 입니다.

    (defun c:chlay (/ en ent_n vla_u ss)
      (while (not (setq en (car (entsel "\n원본 객체를 선택하시오. : "))))) ; 원본 개체를 선택
      (setq ent_n (entget en)  ; 원본 dxf 코드
            vla_u  (cdr (assoc 8 ent_n)) ; 원본의 레이어 이름을 가져옵니다. 그룹코드 8
      )
      (princ "\n레이어를 변경할 개체를 선택하시오. ")
      (setq ss (ssget))  ; 변경할 개체를 선택
      (KiKO_DXF_Code_Change_X ss 8  vla_u) ; 레이어를 변경
      (KiKO_DXF_Code_Change_X ss 62 256) ; 색상을 ByLayer로 변경
      (princ)
    )

    대충 이런씩의 리습이 만들어 집니다.

    그룹코드만 변경해도 다르게 응용이 가능합니다.
    그룹코드 레이어(8) , 색상(62) , 라인타입(6) , 폰트스타일(7) , 문자열(1) 등등....
     

    직접 만들어서 활용해 보세요.
    다른 사람이 만들어 놓은 좋은걸 쓰는거도 좋지만 내가 직접 만들어 쓰는 재미도 있습니다.
     

    DXF Format에 대한 참고 링크 입니다.

     

    Help

     

    help.autodesk.com

    즐거운 하루되시고 오늘도 빨리 퇴근 합시다.


    May the force be with you.


    리습 다운로드

    DXF_Code_Chang.lsp
    0.00MB

     
    다른 리습 다운로드

     

    AutoCAD 리습 - 캐드 도면 객체 숨기기 / 보이기 리습 - 레이어 숨기기, 문자 숨기기, 블럭 숨기기,

    객체를 레이어, 객체종류(문자, 블록, 치수, 폴리라인등), 라인타입, 색상 등으로 구분하여 숨기거나 선택 객체만 보이게 해주는 리습입니다. 캐드에서 제공하는 기본적인 레이어를 켜고 끄는 기

    kiko-lisp.tistory.com

     

     

    AutoCAD 리습 - 캐드 리습 모음 KiKO Lisp / KiKO AutoPLOT

    리습 소개 KiKO Lisp ver 2024.01 / KiKO AutoPLOT ver 2.5 개인적으로 사용하던 리습을 공유합니다. 개인적인 용도로 만들어 쓰던 거라 일부 자질구레한 오류도 있을 수 있습니다. 리습은 AutoCAD에서만 실행

    kiko-lisp.tistory.com

    \

    728x90

    댓글

Designed by Tistory.