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를 그대로 배열 쓰듯이 하면된다.
< 끝내면서 >
아주 간단하게 비베에서 오토캐드를 연동하는 것을 해보았다.
그리 어렵지도 않고 신기하기 까지 하니 이번 여름은 한번 오토캐드와 비베를
친구로 만드는 것도 좋을 것 같다.
조경민
======================================================================
< 개요 > 오토캐드와 어떻게 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 |