지식은 공유되었을 때 그 힘을 발휘한다.



Excel VBA, AutoCAD ActiveX 맛보기 강좌(19)

AutoCAD 개체 맛보기

어제까지 한 AutoCAD와의 연결중에서 가장중요한 내용은 역시 set acad = getobject(,"autocad.application") 문입니다. acad라는 변수(object형)에 autoCAD를 잡아 넣는 문장이였지요. 이제 acad라는 녀석은 곧 AutoCAD가 되는 것입니다.

프로그램을 만들어보기 전에 직접실행창에서 이것 저것 테스트를 해보도록하죠. 역시 프로그램을 만드는 것보다 간단하게 테스트하는 것은 직접실행창이 최고입니다. 직접실행창을 띄우고 아래 그림과 같이 입력해보세요. 어떤 결과가 나오는지요?



물론 AutoCAD가 실행되어있는 상태에서 해보아야겠지요? 정상적인 동작은 아래그림처럼 나왔을 것입니다.



우리가 입력한 내용에 대해서 뜯어보면.. ?getobject(,"AutoCAD.application").name 인데.. ?는 print문입니다. 마지막에 name이라는 것은 아무래도 name이라는 속성이 있는 모양이네요. getobject로 AutoCAD를 잡아서 그 이름을 보여주라는 것이었죠. 결국 이름은 AutoCAD라고 결과를 보여주고 있습니다.

몇가지 더 해보도록 할까요? 아래와 같이 입력해봅니다.



어떤가요? 대충은 감이 오지요? Excel에서 activesheet가 있듯이 AutoCAD에는 activedocument라는 속성이 있는 모양이지요? 그리고 그 document에는 name이란 속성이 있는가봅니다. 결국 getobject(,"AutoCAD.applicaton").activedocument 는 drawing1.dwg라는 현재 활성화 되어있는 dwg파일을 가르킨다는 것을 알수 있습니다. activedocument가 현재 파일이라면 그녀석 아래에 있는 모든 object들에 접근할 수 있을 것 같은 느낌이 듭니다.

간단하게 테스트해보도록할까요? ACAD에서 line한개와 circle한개와 text한개를 그려보도록하겠습니다. 저는 아래와 같은 그림을 그려보았습니다.



그리고 직접실행창에서 아래와 같이 입력해보도록 하겠습니다.



modelspace라는 녀석이 좀 생소하지요? 캐드를 처음 배울때를 떠올리시면 캐드에는 model space와 paper space가 있다는 것이 어렴풋이 기억나실 것입니다. 기억이 안나도 괜찮구요. model space에 그린 도면을 paper space에 원하는 view로 재 배치할 수 있지요? 우리는 대부분 modelspace에 그림을 그립니다. 결국 modelspace는 drawing1.dwg란 이름을 가진 activedocument아래에 있는 개체라는 것을 짐작하실 수 있을 것입니다. 대부분의 object들은 이 아래에 있을 것입니다. 이 modelspace에 있는 entity의 갯수가 몇개일까? 라고 물어보는 문장이 바로 위에서 입력한 ?getobject(,"autocad.application").activedocument.modelspace.count 인 것입니다. count란 속성은 안봐도 비디오죠?

이제 어느정도 autocad의 object에 접근하는 방법을 알게 되었습니다. 딱한가지만 연습해보기로 하겠습니다. 이번에는 item이란 메서드를 사용해보도록 하겟습니다. item이란 메서드는 어느 object의 하위 object에 접근하는 방법인데 그 순번을 이용해서 접근합니다. 앞에서 입력한 문장을 다음과 같이 고치쳐서 ?getobject(,"autocad.application").activedocument.modelspace.item(0).objectname이라고 입력하면.. 다음그림과 같이 modelspace안에 있는 첫번째 object의 이름을 보여줍니다. item메서드의 기능을 대충 아시겠죠?



이제 modelspace에 세개의 entity가 있다는 것을 알았고 item메서드를 이용하여 각 object에 접근하는 방법을 알았으니 for문을 이용하여 각 entity의 이름을 출력해주는 간단한 프로그램을 만들어볼까요? sub로 마들지말고 직접실행창에서 해보도록 하지요. 아래그림의 첫줄과 같이 입력하고 enter를 치면 modelspace에 있는 3개 entity의 이름들을 보여줍니다.


VB에서 :는 여러줄을 한줄에 표시할때 줄을 구분하는 구분자입니다. 직접실행창에서는 한줄밖에 입력 못하기 때문에 구분자로 구분해서 세줄을 입력한 것입니다.

오늘은 여기까지 하고 내일부터는 새로운 엔티티를 만들고 수정하는 본격적인 AutoCAD Activex로 들어가도록 하겠습니다.



dolljong@dreamwiz.com