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



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

Model space에 Entity추가하기(2)

어제는 엔티티 추가하기를 한다고 해놓고 그냥 문턱에서 주저앉고 말았죠. 점심시간을 이용하다보니 시간이 좀 짧은 감이 없지 않아 있습니다. 오늘은 정말로 엔티티를 추가해보도록 하겠습니다. 엔티티를 추가하기 위해서는 변수를 설정해야 합니다. entity를 추가하는 메서드는 대부분 add로 시작합니다. 따라서 getobject(,"autocad.application")으로 잡은 AutoCAD개체중 activedocument의 modelspace에 circle을 추가하기 위해서는 addcircle메서드를 사용하면 됩니다. 즉 acad라는 object형변수에 autocad개체가 잡혀있다면, acad.activedocument.modelspace.addcircle.. 이런식으로 circle을 추가하는 것입니다.

그렇다면 도움말의 도움을 받아서 circle을 추가하는 addcircle메서드란 놈에 대해서 알아보기로 하겠습니다. 이번에는 아래그림과 같이 mehod를 직접 선택해서 method들 중에서 addcircle을 찾아보는 방식으로 도움말을 사용해보겠습니다.



method를 선택하면 아래 그림같은 화면이 나올 것입니다. 모든 메서드를 알파벳순으로 다 보여주고 있습니다. 그런데 어느 개체의 매서드냐구요? 저번에도 한번 말씀드린 적이 있는데 A라는 메서드가 있을 때 그 메서드가 어느 특정 개체에만 속해있는 것은 아닙니다. 따라서 메서드 목록을 보면 메서드만 나올뿐입니다.




addcircle메서드를 찾아서 클릭을 해보면 아래와 같은 화면이 나올 것입니다. 보통 메서드에 대한 도움말은 아래와 같은 형식을 취하고 있는데 한줄 한줄 살펴보면...
RetVal = object.AddCircle(Center, Radius) 이줄은 이 메서드를 사용하는 방법을 보여주고 있습니다. 각각의 인자나 변수에 대한 설명은 아래쪽에 나와있죠. 여기서 object에 대한 설명을 보면 modelspace, paperspace, block이라고 되어있습니다. block을 대상으로 하면 블럭 정의에 addcircle메서드를 통하여 원을 삽입할 수 있습니다. 말하자면 model space에 엔티티를 그리듯이 block도 정의할 수 있다는 것입니다.
여기서 RetVal에 대한 설명을 보면 새로 만들어진 circle object를 돌려준다고 되어있습니다. 만일 circle을 그리고 말것이라면 이 return value를 받을 필요가 없지만 만일 새로그린 circle의 색을 바꾼다든가 반지름을 바꾼다든가 하려면 이 메서드가 돌려주는 circle object를 받아서 변수에 저장해두었다가 나중에 써먹을 수 있는 것입니다.
그리고 cicle을 그리는데 제일 중요한 중심점과 반지름은 어떻게 알려주나면, center라는 인자와 radius라는 인자를 통해서 알려주게 되어있습니다. 그런데 좀 의문이 가지요? 분명 중심점의 좌표를 알려주기 위해서는 x,y,z 세개의 값이 필요할 것 같은데 떨렁 center라는 인자밖에 없으니 말이죠. radius는 반지름이니까 한개만 있으면 될 것 같고....
center에 대한 설명을 한번 읽어보세요.. three-element array of doubles 이라고 되어있죠. double형의 세개의 요소를 가진 array라는 말이 있습니다. 즉 이 center라는 변수의 형은 integer도 아니고 double도 아닌 double형이면서 세개의 요소를 가진 배열이란 것입니다.
배열을 정의하는 방법은 잘 아시고 계시겠죠? 확실히 하는 의미에서.. dim center(2) as double라고 정의하면 됩니다. basic에서는 특별히 선언하지 않으면 배열의 첨자는 0부터 시작합니다. 따라서 세개의 요소를 가지는 array는 center(2)라고 선언합니다.
이제 addcircle메서드를 사용하기 위해서는 dim center(2) as double라고 미리 center점의 정보를 넣어둘 array를 선언해야한다는 알았습니다. 이제 circle을 추가하는 sub를 본격적으로 만들도록 합니다.

Sub Macro1()
  Dim acad As Object      'AutoCAD개체를 넣어둘 변수
  Dim c As Object         'circle object를 넣어둘 변수
  Dim center(2) As Double '원의 중심점을 넣어둘 배열
  
  center(0) = 0  'x좌표
  center(1) = 0  'y좌표
  center(2) = 0  'z좌표
  
  Set acad = GetObject(, "AutoCAD.application")
  Set c = acad.activedocument.modelspace.addcircle(center, 10)

End Sub

위의 코드를 실행시키면 캐드에 중심점이 0,0,0이고 반지름이 10인 원이 그려지게 됩니다. 한줄 한줄 설명을 해볼까요? 일단 dim acad as object는 여러번 보셨으니 아실테죠? AutoCAD개체를 담아두기 위한 변수를 선언하는 것입니다. 그리고 c라는 변수를 object형으로 선언했는데, 이것은 addcircle메서드가 돌려주는 새로만들어진 circle개체를 담아두기 위한 변수입니다. addcircle메서드로 만들어진 circle개체를 나중에 중심점을 바꾼다든가, 반지름을 바꾸는 등 수정을 가하려면 그 개체에 접근해야 하는데 이렇게 담아두었다가 접근해서 고치게 되는 것입니다. center(0)은 x좌표를 의미하고, center(1)과 center(2)는 각각 y좌표와 z좌표를 의미합니다.
어떤가요? 첫엔티티를 그려본 느낌이.. 이제 여러분들은 다른 엔티티도 얼마든지 그릴 수 있습니다. add... 메서드들의 찾아보면 여러가지 entity를 model space에 추가하는 방법들이 나옵니다. 도움말에 예제도 있으니까 그걸 한번 쭈욱 훑어보면 쉽게 이해가 가겠지요?
그럼 내일 계속하도록 하겠습니다.



dolljong@dreamwiz.com