오토캐드(AUTO CAD) DXF 코드 조회 리습 LISP

1. LISP 이란?

LISP(List Processing)은 AUTOCAD에서 사용되는 프로그래밍 언어로 DXF 코드를 LISP 함수로 Processing 하여 빠르고 효과적인 작업을 수행할 수 있게 합니다. 별도의 컴파일이 필요 없이 바로 사용할 수 있어 사용자 친화적이며, 접근이 쉽다는 장점이 있습니다. 단, Autocad LT 버전에서는 지원하지 않습니다.

1) DXF 코드 조회 리습(LISP)

DXF 코드를 다루기 전에 DXF 코드를 조회하는 방법을 살펴보겠습니다. 아래 추가된 파일은 오토캐드에 작성된 객체에 정보를 확인하기 위한 리습입니다. 첨부된 리습 파일을 로드하고, 명령어 “ENT”를 입력 후 객체를 선택하면 DXF 코드를 확인할 수 있습니다. 이렇게 조회된 다양한 객체의 DXF 코드는 AUTOLISP의 함수를 사용하여 lisp 파일을 작성하는데 활용할 수 있습니다.

작성된 리습(lisp)에 사용된 함수는 객체를 선택하는데 사용되는 함수이며, 자세한 내용은 다음과 같습니다.

① entsel : 선택한 단일 객체의 이름과 선택지점의 좌표를 나타냄
② car : 리스트의 첫 번째 요소를 반환합니다.
③ entget : entity name에 대한 리스트를 반환합니다.
④ 해석
entsel은 entity(객체)를 선택하면 객체 이름과 선택된 점의 좌표를 반환
car는 entsel에서 반환하는 첫 번째 요소인 객체 이름을 선택한다.
entget는 반환한 객체 이름의 정보를 리스트로 반환한다.

autocad-dxf-코드-조회-리습

2. DXF 코드란?

Autocad로 작성된 도면에는 다양한 객체로 구성되어있습니다. 이러한 객체의 최소 단위를 ENTITY라고 하며, DXF코드로 작성되어 데이터 교환, 관리, 변환을 위해 사용됩니다. 예를 들어 도면에 선(Line)이 그려져 있다고 가정하겠습니다. 우리 눈에 보이는 선은 오토캐드 내부에 작성된 DXF코드에 의해 시각화된 정보를 표현한 것입니다. 그럼 DXF코드에는 어떤 정보가 담겨져 있는지 살펴보겠습니다. DXF코드는 객체에 따라 공통으로 적용되는 코드와 독립적으로 적용되는 코드가 있습니다. 이해를 돕기위해 선에 대한 DXF 코드 구성을 살펴보겠습니다. DXF 코드 조회 리습을 실행하고 선(LINE)을 선택하면, 아래와 같이 선을 구성하고 있는 DXF 코드를 확인할 수 있습니다.

((-1 . <도면요소 이름: 1c93b542c60>) (0 . "LINE") (330 . <도면요소 이름: 1c91472e9f0>) (5 . "19560E") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 7) (10 246539.0 689582.0 0.0) (11 247808.0 689582.0 0.0) (210 0.0 0.0 1.0))

위에 작성된 코드는 임의의 선을 선택하여 구성된 DXF코드를 나타내었습니다. 알 수 없는 숫자와 코드들로 보이지만 AUTOCAD에서 사용되는 데이터베이스입니다. DXF 코드는 코드명 뒤에 해당 ENTITY의 정보로 표현됩니다. 위에서 작성된 코드와 내용을 살펴보겠습니다.

① (-1 . <도면요소 이름: 1c93b542c60>) : DXF코드 “-1”, 뒤에 따라오는 내용은 Entity 이름. 고유한 이름(도면 안에서 중복되지 않음)이며, 16진수로 표현. 도면이 열릴 때마다 변경됨

② (0 . “LINE”) : DXF 코드 “0”, Entity의 type을 나타냄

③ (330 . <도면요소 이름: 1c91472e9f0>) DXF 코드 “330”, 소프트 포인터 핸들. INSERT 및 XREF 작업 중에 변환

④ (5 . “19560E”) : DXF 코드 “5”, Entity 핸들.

⑤ (100 . “AcDbEntity”) : DXF 코드 “100”, 하위 클래스 표식기

⑥ (67 . 0) : DXF 코드 “67”, 0 이면 도면 요소가 모형 공간에 있음을 나타내고 1이면 도면 공간에 있음을 나타냄

⑦ (410 . “Model”) : DXF 코드 “410”, 배치 탭 이름

⑧ (8 . “0”) : DXF 코드 “8”, 도면층 이름

⑨ (62 . 7) : DXF 코드 “62”, 색상 번호

⑩ (10 246539.0 689582.0 0.0) : DXF 코드 “10”, 시작점(X,Y,Z)

⑪ (11 247808.0 689582.0 0.0) : DXF 코드 “11”, 끝점(X,Y,Z)

⑫ (210 0.0 0.0 1.0)) : DXF 코드 : DXF 코드 “210”, 돌출 방향 X 요소



1) 객체별 DXF 코드 예시

(1) 원 – CIRCLE

((-1 . <도면요소 이름: 1c93b542c90>) (0 . "CIRCLE") (330 . <도면요소 이름: 1c91472e9f0>) (5 . "195611") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 7) (100 . "AcDbCircle") (10 248423.0 689507.0 0.0) (40 . 78.3846) (210 0.0 0.0 1.0))


(2) 폴리라인

((-1 . <도면요소 이름: 1c93b542ca0>) (0 . "LWPOLYLINE") (330 . <도면요소 이름: 1c91472e9f0>) (5 . "195612") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 7) (100 . "AcDbPolyline") (90 . 4) (70 . 1) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 248674.0 689603.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (10 248822.0 689603.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (10 248822.0 689494.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (10 248674.0 689494.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (210 0.0 0.0 1.0))


(3) 호 – ARC

((-1 . <도면요소 이름: 1c93b542cb0>) (0 . "ARC") (330 . <도면요소 이름: 1c91472e9f0>) (5 . "195613") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 7) (100 . "AcDbCircle") (10 249178.0 689465.0 0.0) (40 . 125.381) (210 0.0 0.0 1.0) (100 . "AcDbArc") (50 . 0.404726) (51 . 2.54954))


(4) 블록 – BLOCK

 ((-1 . <도면요소 이름: 1c93b542e30>) (0 . "INSERT") (330 . <도면요소 이름: 1c91472e9f0>) (5 . "19562B") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 7) (100 . "AcDbBlockReference") (2 . "사각형") (10 0.0 0.0 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0))




마치며

오늘은 리습을 통해서 Autocad에 객체를 구성하는 DXF코드에 대해서 알아보았습니다. 오늘 내용을 정리해보겠습니다.

① Autocad에 객체(Entity)는 DXF코드로 구성되어있다.
② 객체에 따라 표현되는 DXF코드 같지 않다. (공통으로 적용되는 DXF코드도 있음)
③ Lisp은 DXF코드와 함수를 사용하여 작성한다.

DXF 코드는 내용이 방대해서 기본 개념에 대해서 간단히 설명했습니다. 각 객체의 자세한 DXF 코드 정보는 아래 링크를 통해 확인하시기 바랍니다.

AUTODESK DXF 참고 페이지

2 thoughts on “오토캐드(AUTO CAD) DXF 코드 조회 리습 LISP”

  1. 안녕하세요.
    폴리라인의 양끝 점에 블럭을 삽입하고자 합니다.
    해당 포인트를 확인할수 있는 dxf 값이 있을까요?
    10 으로 시작은 잡을 수 있는데
    반대편 끝을 잡을 수 있는 함수 알려주시면 감사하겠습니다.
    선택할 객체는 라인,원호,폴리라인 모두 확인하면 좋겠습니다.

    응답
    • autolisp activeX를 이용하면 시작점과 끝점을 파악할 수 있습니다. 나중에 관련 내용으로 포스팅을 해보겠습니다. 아래 코드를 오토캐드에 명령창에 한줄씩 넣어서 실행해보시면 해당 entity에 속성을 표시해줍니다.
      1. (setq ent(car (entsel)))
      2. (setq vlent (vlax-ename->vla-object ent))
      3. (vlax-dump-object vlent T)
      폴리 라인의 경우 “Coordinates”의 값이 있는데 (x y x y)형식의 데이터가 시작점 x y 끝점 x y입니다.

      응답

Leave a Comment