VB With AutoCAD R14                              오후 5:08 1999-07-24
                                                  조경민
======================================================================

< 개요 > 오토캐드와 어떻게 VB가 연동되는가.

오토캐드 R14 프로그램과 실행시 연동되는 VB 프로그램을 만드는것이 목적

오토캐드 R14에는 다른프로그램과의 연동을 위해 여러 객체를 지원하고 있다.

예를 들어

ACadApplication 객체는 오토캐드의 실행중인 인스턴스 객체이다.

이 객체안에는 ACadDocument가 있으며 이 다큐먼트객체는 현재 실행중인

오토캐드의 작업 인스턴스를 말한다. dwg파일을 열면 하나의 작업이 열리고

이것이 다큐먼트이다.
                    < R14에서 지원하는 객체 간략설명 >

이외에도 여러가지 객체를 지원하고 있다.

주요히 기억해야 할것은 ACadApplication.ACadDocument.ModelSpace로 한

오토캐드 객체내 한 작업에서의 그리는 공간인 모델스페이스로 이 안에는

실제로 그리려는 메소드들이 들어있다. 라인을 그리고 싶으면

ModelSpace.AddLine를 이용하면 된다.


이 문서는 오토캐드가 실행되는 동시에 연동될 VB프로그램이 실행되어 VB

프로그램이 오토캐드에게 명령을 주거나 받아서 컨트롤하는것이 목적이다.


< 오토캐드 설치 > 오토캐드를 설치해야 할 수 있지

오토캐드 CD를 넣고 오토런을 하거나 Setup.exe이를 하여 다 설치하기를 한다.


오토캐드 설치에 관한 자세한 정보를 바라면 아래 주소로 찾아가보면 나온다.

http://www.autodesk.com/products/acadr14/index.shtml

  
아래는 VBA로 이 문서와 관련된 오토데스크사의 공식 웹문서이다.

http://www.autodesk.com/products/acadr14/compapps/vbaed.htm


위의 주소에는 R14를 이용하여 VB에서 어떻게 연동하는가를 간략히 소개하고

VB로 캐드의 내용을 Excel 스프래드 쉬트로 연동하는것을 예제로 담고있다.


마이크로소프트 사에서 공식 VB 연동 관련 웹페이지는 다음과 같다.

http://msdn.microsoft.com/vba/prodinfo/autodesk.asp


< 간단한 연동 > VB에서 오토캐드를 실행시키자

먼저 VB를 실행시킨후 새로운 폼 프로젝트를 만들자. 그리고 주메뉴의

프로젝트/참조(N)... 을 실행 시키고 찾아보기로

C:\Program Files\AutoCAD R14\acad.tlb 파일을 추가시킨후

참조 리스트의 AUTOCAD를 체크하여 이 프로젝트에서 오토캐드 형식라이브러리

(tlb)를 쓸수 있도록 한다.

그리고 간단한 버튼을 만든후 그 버튼을 누를때 다음과 같은 일이 일어나게한다.

    Dim acad as Object

    On Error Resume Next
        Set acad = Getobject(, "AutoCAD.Application")
    If Err Then
        Set acad = CreateObject("AutoCAD.Application")
        Err.Clear        
    End If
    acad.Visible = True
    
이제 프로젝트를 Run시켜보고 버튼을 눌러보자. 그러면 오토캐드가

없다면 실행될것이다. 신기할것이다. 아마도...


< 오토캐드 화면에 라인 그리기 > VB 연동후 그리기

이제 좀 오토캐드 형식라이브러리 쓰는 커먼한 방법을 위해서, 깔끔하게

하기 위해서 비베 환경 오른쪽의 프로젝트창에서 Project1( Project1.vbp)

를 오른클릭후 추가/모듈(M).. 을 눌러 새로운 베이직 모듈을 생성한다.

그리고 그 안에 다음과 같은 오브젝을 쓴다.

  Option Explicit

  Public acad As Object
  Public Doc As Object
  Public MSpace As Object

그러면 다른 폼들이 이 Public된 객체들을 마음대로 쓸수 있기 때문이다.

이제 폼의 캐드 생성 버튼 역시 다음처럼 하면 된다.

    ' Dim acad as Object 이것은 뺀다. 모듈에서 이미 선언
    On Error Resume Next
        Set acad = Getobject(, "AutoCAD.Application")
    If Err Then
        Set acad = CreateObject("AutoCAD.Application")
        Err.Clear        
    End If
    acad.Visible = True
    
    Set Doc = acad.ActiveDocument ' 현재 작업중인 다큐먼트
    Set MSpace = Doc.ModelSpace   ' 현재 다큐먼트의 그리는 공간

그리고 실제 선을 그리기위해서 선그리기 버튼을 만들고 그 버튼을 눌렀을때

다음과 같은 코드가 일어나게 한다.

    Dim sp(0 To 2) As Double ' Dim sp(3) As Double은 디버그 에러난다.
    Dim ep(0 To 2) As Double ' 이유 멀라 -_- 난 비베맨이 아니다.
    Dim lineObject As Object
    sp(0) = 0#  ' x
    sp(1) = 0#  ' y
    sp(2) = 0#  ' z
    ep(0) = 10#
    ep(1) = 10#
    ep(2) = 10#
    
    Set lineObject = MSpace.AddLine(sp, ep)
    lineObject.Update

자 이제 다시 프로젝트를 Run 하고 먼저 오토캐드 연동하는 버튼을 클릭하여

오토캐드 연동을 한후 선 그리기 버튼을 눌러보자 어떤가 선이 그려진다.

신기로울 것이다. 만일 lineObject.Update를 안써주면 눌러도 그린거 같지

않을 것이지만 오토캐드 안에서 줌을 하든 Pan(화면 이동)등을 하면 선이

보일것이다. Update를 함으로써 그리기를 시도하는것이다.

만일 모든 오브젝을 다시 그리고 싶으면 acad.Update를 대신 넣으면 된다.


< 오토캐드 화면에 원 그리기 >

역시 원 그리기 버튼을 만든후 아래와 같이 코드를 한다.

    Dim cp(0 To 2) As Double
    Dim rd As Double
    Dim co As Object
    cp(0) = 0#
    cp(1) = 0#
    cp(2) = 0#  
    rd = 2        ' 반지름
    Set co = MSpace.AddCircle(cp, rd)
    'co.Update
    acad.Update

쉽지 않은가!!!! 그럼 도데체 MSpace ( ModelSpace ) 객체에는 어떤 메소드가

있는 것일까 알수 있는 방법은 없을까? 아니다 있다. 당근이 있다.

비베에서 F2키나 주메뉴의 보기/개체찾아보기(F2)를 실행하면 개체 정보창이

나온다.

<모든 라이브러리> 콤보를 AutoCAD로 맞추고 ^ 위로 꺽새 두개가 아래 꺽쇠

두개로 되게 눌르면 아래로 객체와 메소드,프로퍼티 정보 리스트창이 생긴다.

그럼 아래 샌긴 창에 왼편에는 I짜로 시작하는 예로 IAcad3DFace 등이 쭉

있고 오른편에는 그 각 객체의 해당하는 메소드나 프로퍼티가 있다.

또 아래의 회색창은 선택된 메소드나 프로퍼티의 형식을 알아 볼수 있다.

AutoCadApplication객체인 acad객체를 보려면 어캐 해야 할까?

IAcadApplication 객체를 보면 된다. 그러면 ACadDocument객체는

IAcadDocument를 보면되고 IAcadModelSpace는 모델스페이스 객체인것이다.

IAcadLine은 AcadApplication.AcadDocument.AcadModelSpace.AddLine을 함으로

생기는 라인 객체이다.


그럼 AddLine 함수의 도움말을 보고 싶으면? AddLine을 비베에서 쓴후 F1키를

눌르면 된다! 예제도 있다. 너무나 고마운 일이다


< 오토캐드 화면에서 객체 선택 > VB와 대화를 하자

모듈에 다음과 같은 프로시져를 넣어보자

Public Sub Get캐드object(aobject As Object)
'  Acquire object which user chose.
    Dim SSet As Object
    
    MsgBox "Select Object"
    'Define new selection set.
    Set SSet = acad.ActiveDocument.SelectionSets.Add("SelectedOBJ")
    SSet.SelectOnScreen   'Acquire object which user chose.
    Set aobject = SSet.Item(0)  'Take out line from selection set.
    Set SSet = Nothing
End Sub

그리고 폼에 선택하는 버튼을 만들고 이 버튼을 누르면 다음 코드가 실행하게

하자

    Dim sp As Variant
    
    Dim obj As Object
    Call Get캐드object(obj)
    sp = obj.endPoint

    MsgBox sp(0) & " : " & sp(1)

Run을 눌러 실행해본다. 연동을 한 후 캐드에 그리기 버튼을 그린 후

선택버튼을 눌르자. 그러면 Select Object이라는 메세지가 뜨고 오토캐드로

가서 [] 커서( 선택 커서)로 한 선을 왼클릭후 오른클릭( 선택끝내기)를 하고

VB프로그램을 보자 그러면 선택된 선의 obj.endPoint 끝점의 x,y값이 나올것이다.

특이한 점은 obj.endPoint는 3개의 원소를 갖는 Double형 배열이지만 리턴형이

Variant라는 것이다. 이 Variant를 그대로 배열 쓰듯이 하면된다.


< 끝내면서 >

아주 간단하게 비베에서 오토캐드를 연동하는 것을 해보았다.

그리 어렵지도 않고 신기하기 까지 하니 이번 여름은 한번 오토캐드와 비베를

친구로 만드는 것도 좋을 것 같다.

  

'KB > tutorial' 카테고리의 다른 글

익스체인지2K 서버 까는 방법  (0) 2004.03.19
ATL 조금 하기  (0) 2004.03.19
[com] ATL COM 쓰기  (0) 2004.03.19
[mfc] Socket 프로그래밍  (4) 2004.03.19
[ActiveX] 디지털서명  (0) 2004.03.19

+ Recent posts