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



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

AutoCAD 개체의 구성

어제는 AutoCAD개체 중 몇개를 테스트해보았습니다. 테스트해볼 때 직접실행창을 사용하면 참 편합니다. sub으로 만들어서 하려면 번거롭죠.. 오늘은 이 AutoCAD의 개체는 어떻게 구성되어있는지 알아보도록 하겠습니다. AutoCAD의 개체에 대해서 가장 잘 알려줄만한 사람이 과연 누굴까요? 어떤이가 가장 잘 알고 있을까요? 물론.. AutoCAD를 만든 사람들입니다. 하지만 그사람들에게 직접 질문은 할 수 없고.. 가장 좋은 방법은 그 사람들이 만들어둔 help파일들을 뒤져보는 것입니다. 제는 help는 어쩌면 프로그램 자체보다 더 중요할지도 모른다고 생각하는 사람인데요.. 하드 디스크 한편에서 돌아다니는 프로그램 *.exe만 있고 메뉴얼도 없는 프로그램은 프로그램이 아니라 그냥 쓰레기통에 불과한 것이겠지요. 그래서 저는 프로그램을 만드는 시간보다 메뉴얼을 만드는데 더 공을 들이는 것 같습니다.

암튼 각설하고 help파일을 뒤져보도록 하겠습니다. 캐드에서 help메뉴를 선택하거나 F1을 눌러서 help를 띄우면 아래와 같은 항목이 나올것입니다. 이중에서 VBA & ActiveX Automation을 선택합니다.



AutoCAD버젼에 따라 조금씩 차이가 있을 수 있지만 아마도 비슷한 구성을 가지고 있을 것이라 생각됩니다. VBA항목을 선택하면 새로운 help가 뜨게되는데 이것은 AutoCAD ActiveX뿐만 아니라 Visual LISP도 포함하는 Automation전반에 관한 help파일인 것 같습니다. 여기서 우리가 찾아보아야 할 항목은 아래 그림처럼 ActiveX & VBA reference아래의 object model입니다.



그러면 AutoCAD의 object모델을 모여줍니다.



AutoCAD의 모든 개체의 구성을 한눈으로 보여주는 화면인데 그림이 좀커서 꽉 차는군요. 잘 보일런지 모르겠습니다. 스크롤바를 이용해서 한번 쭈욱 훑어 보세요.. 맨 아래의 regend를 먼져보는 것이 좋을 것 같습니다. 모양에 있어서 네모난것은 collection이고 트랙형은 object라고 되어있습니다. collection은 말 그대로 어떤 것들이 모인 것이겠죠. 예를 들자면 document라는 녀석이 있는가하면 documents라는 녀석이 있습니다. 둘다 document같은데 한녀석은 s가 붙어있고 네모박스로 쌓여있고 한녀석은 트랙안에 들어가 있습니다. 결국 "documents는 document의 집합이다"라는 것을 알 수 있습니다.

layers라는 녀석도 마찬가지로 layer를 거느리고 있습니다. 그렇다면 현재 열려있는 파일에 layer가 몇개 있는지를 알려면 어떻게 해야할까요? 왠지 count라는 속성을 사용하면 될것 같지요? 그렇다면 어떤 개체에다 count를 적용시키면 될까요? 제일 상위 개체부터 차근차근 따라가보면.. 일단 getobject(."autocad.application")은 당연히 있어야겟지요? 그다음에 현재 활성화된 dwg파일을 선택해야겠죠? activedocument로요.. 그러면 getobject(."autocad.application").activedocument 까지 되었습니다. 여기서 잠시 위의 구성도를 보도록하지요. layers collection은 바로 document개체 아래에 있습니다. 따라서 getobject(."autocad.application").activedocument.layes하면 layers collection에 접근이 가능하겠찌요? 그다음에 바로 count 속성을 사용하면 현재 열려있는 파일에 정의된 layer의 갯수를 알아낼 수 있을 것입니다. 아래 그림처럼 말이죠..




그렇다면 첫번째 레이어의 이름은 무엇일까요? name속성을 이용하면 될 것 같다는 느낌이 팍! 오시죠? 그렇다면 개체가 문제인데.. layers collection 중에서 첫번째 layer를 찝어내야 하는데... 어떻게 하면될까요? 얼마전에 item이란 메서드에 대해서 말씀드린 적이 있었지요? 여러개의 개체중 특정번째 개체를 돌려주는 메서드입니다. layers collection에도 어김없이 이 item메서드를 지원하고 있습니다. layers collection를 마우스로 클릭해보면 layer collection에 대한 도움말을 볼 수 있는데, item메서드가 있는 것을 확인할 수 있습니다. 도움말을 한번 보도록하구요. 현재 열려있는 dwg파일에 정의된 layer중 다섯번째 layer의 이름은 아래와 같이 확인 할 수 있을 것입니다.



basic에서는 기본적으로 첫번째 요소는 0입니다. 즉 첫번째 요소는 layers.item(1)으로 접근하는게 아니라 layers.item(0)으로 접근하죠. 그리고 item이란 메서드 대신에 layers(0)과 같이 직접 접근도 가능합니다. layers(0)과 layers.item(0)은 같은 뜻입니다. 아래그림처럼 말이죠.



오늘은 AutoCAD 개체의 구성에 대해서 알아보았습니다. 내일부터는 새로운 엔티티를 만들고 수정하는 본격적인 AutoCAD Activex로 들어가도록 하겠습니다.



dolljong@dreamwiz.com