오토캐드(AUTO CAD) ActiveX 객체 특성 살펴보기

1. AutoCAD ActiveX

ActiveX는 오토캐드 내부 또는 외부에서 프로그래밍 언어를 통해 AutoCAD를 조작할 수 있는 Interface를 뜻합니다. 쉽게 말해 프로그래밍 언어를 통해 AutoCAD에 접근하기 위해서 사용되는 Interface가 ActiveX로 이해하시면 됩니다. 이해되지 않는 부분은 실제 ActiveX 함수를 다루면서 차근차근 이해하시기 바랍니다. 그럼 ActiveX의 함수를 살펴보면서 대략적인 특성을 살펴보겠습니다.

1) ActiveX 함수

ActiveX 호출, AutoCAD App, 활성화 도면, 작업 공간(ModelSpace)에 사용되는 함수입니다. ActiveX 함수를 살펴보면 오토캐드, Document, ModelSpace를 모두 객체로 선택할 수 있습니다. 객체로 선택할 수 있다는 것은 변수로 지정하여 특성을 파악하거나 변경할 수 있다는 이야기가 됩니다.

① vl-load-com : VisualLisp 확장 함수 로드
② vlax-get-acad-object : 최상위 AutoCAD Application을 VLA 객체로 리턴
③ vla-get-ActiveDocument : 활성화된 DWG를 VLA 객체로 리턴
④ vla-get-ModelSpace : 해당 Document의 ModelSpace 공간을 VLA 객체로 리턴
⑤ vlax-dump-object : 객체 특성 및 매소드를 출력

아래 예시는 ActiveX 호출 → AutoCAD App → 활성화 도면 → 작업공간(ModelSpace)를 변수로 지정하여 현재 작업공간(ModelSpace)의 대한 속성을 출력했습니다. 아래 실제 캐드에서 실행한 모습입니다. 객체에 대한 다양한 정보를 확인할 수 있습니다. vlax-dump-object 함수를 이용하면 선택한 객체의 다양한 정보를 파악할 수 있으며, (vlax-dump-object 객체 T)를 입력하면, 다양한 매소드를 확인할 수 있습니다.

(vl-load-com)
(setq cad1(vlax-get-acad-object))
(setq cad2(vla-get-ActiveDocument cad1))
(setq cad3(vla-get-ModelSpace cad2))
(vlax-dump-object cad3)

autocad-ActiveX-객체-특성

2) ActiveX를 활용하는 이유는?

ActiveX의 구조, 함수, 사용방법 등 많은 정보를 파악해야 하지만, 우선 왜 쓰는지를 알아야 합니다. ActiveX를 이용하면 객체의 다양한 정보를 다룰 수 있는 장점이 있습니다. 객체 속성을 파악하기 위해 lisp과 ActiveX 차이를 간단히 살펴보겠습니다. 아래 실행 구문을 명령 창에서 실행하였고, 객체는 동일한 호(ARC)를 선택했습니다.

<실행 구문>
(entget(car(entsel)))


<객체 속성>
((-1 . <도면요소 이름: 14331ae0880>) (0 . "ARC") (330 . <도면요소 이름: 14319c2f1f0>) (5 . "30B4D8") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "OUTER") (48 . 10.0) (100 . "AcDbCircle") (10 4.61696e+06 120512.0 0.0) (40 . 687.945) (210 0.0 0.0 1.0) (100 . "AcDbArc") (50 . 0.453373) (51 . 3.36665))


이번엔 ActiveX를 이용하여 객체 정보를 확인해보겠습니다. 아래 코드를 한 줄씩 명령 창에 입력하고 위에서 선택했던 호를 똑같이 선택해보겠습니다. 객체 속성의 RO(Read Only)로 표시되는 데이터는 변경할 수 없습니다.

<실행 구문>
(setq ent(car (entsel)))
(setq vlent (vlax-ename->vla-object ent))
(vlax-dump-object vlent)


<객체 속성>
IAcadArc: AutoCAD Arc 인터페이스
특성 값:
Application (RO) = #
ArcLength (RO) = 2004.17
Area (RO) = 635822.0
Center = (4.61696e+06 120512.0 0.0)
Document (RO) = #
EndAngle = 3.36665
EndPoint (RO) = (4.61629e+06 120359.0 0.0)
EntityTransparency = "ByLayer"
Handle (RO) = "30B4D8"
HasExtensionDictionary (RO) = 0
Hyperlinks (RO) = #
Layer = "OUTER"
Linetype = "ByLayer"
LinetypeScale = 10.0
Lineweight = -1
Material = "ByLayer"
Normal = (0.0 0.0 1.0)
ObjectID (RO) = 42
ObjectName (RO) = "AcDbArc"
OwnerID (RO) = 43
PlotStyleName = "ByLayer"
Radius = 687.945
StartAngle = 0.453373
StartPoint (RO) = (4.61758e+06 120814.0 0.0)
Thickness = 0.0
TotalAngle (RO) = 2.91328
TrueColor = #
Visible = -1



3) 활용방법

객체 정보를 확인하기 위해 dxf 코드를 확인하면 얻을 수 없는 데이터들이 있습니다. 예를 들어 호(ARC)의 dxf 코드에는 시작점(Startpoint), 끝점(Endpoint)를 확인할 수 없지만 ActiveX를 이용하면 간단히 확인할 수 있는 장점이 있습니다. 하지만 ActiveX는 MAC에서 지원하지 않는 단점이 있습니다.


마치며

오늘은 AutoCAD에서 활용할 수 있는 ActiveX 객체 특성에 대해 살펴보았습니다. dxf 코드 데이터에 비해 다양한 객체 정보를 확인할 수 있었습니다. ActiveX는 방대한 설명이 필요한 부분도 있지만, 이번 시간에는 간단히 다루고 넘어가겠습니다. 추후에 실제 리습 프로그래밍을 통해 ActiveX 함수와 lisp 함수를 적절히 사용하는 방법을 살펴보겠습니다. 이번 시간에는 ActiveX로 객체를 리턴하고, 속성을 파악하는 부분을 꼭 기억해 두시기 바랍니다.

Leave a Comment