본문 바로가기
<설계프로그램>/솔리드웍스 API (VBA)

[솔리드웍스 VBA] 2-1. 원그리기 예제 코드 뜯어보기 (1) Dim 이란?

by bigpicture 2025. 3. 24.
반응형

지난시간에 솔리드웍스 VBA를 이용해서 원을 그려보았습니다. 코드는 아래와 같습니다. 이번 시간에는이 코드를 하나씩 차근차근 살펴봅시다. 

 

Dim swApp As SldWorks.SldWorks
Dim swModel As ModelDoc2
Dim swSketchMgr As SketchManager

Sub main()
    ' 솔리드웍스 연결
    Set swApp = Application.SldWorks
    
    ' 새 파트 파일 생성
    Set swModel = swApp.NewPart
    
    ' 앞면 선택
    swModel.Extension.SelectByID2 "Front Plane", "PLANE", 0, 0, 0, False, 0, Nothing, 0
    
    ' 스케치 시작
    Set swSketchMgr = swModel.SketchManager
    swSketchMgr.InsertSketch True
    
    ' 원 그리기 (중심: 0,0 / 반지름: 0.05미터)
    swSketchMgr.CreateCircle 0, 0, 0, 0.05, 0, 0
    
    ' 스케치 종료
    swSketchMgr.InsertSketch True
    
    ' 화면 줌 맞춤
    swModel.ViewZoomtofit2
End Sub

 

아마 당신이 비주얼베이직 언어를 이미 알 수도 있고 그렇지 않을 수도 있을겁니다. 당신이 적어도 파이썬과 같은 프로그래밍 언어 하나를 공부해본 사람이라고 가정하고 설명하겠습니다. 

 

먼저 첫줄을 봅시다. 

 

Dim swApp As SldWorks.SldWorks

 

비주얼베이직에서 Dim은 변수선언자입니다. swApp 이라는 변수를 선언하는 코드입니다. swApp이라는 변수를 어떤 데이터형으로 선언하냐면, Sldworks.Sldworks 라는 데이터형으로 선언합니다. Sldworks.Sldworks 는 Sldworks 라는 네임스페이스 안에 있는 Sldworks 라는 클래스 객체를 말합니다. SldWorks 네임스페이스는 솔리드웍스가 제공하는 자동화 라이브러리 하위 구조입니다. 그 안에 있는 SldWorks 클래스는 솔리드웍스 애플리케이션을 조작하는 최상위 객체구요. 아래와 같은 구조입니다. SolidWorks 클래스는 우리가 솔리드웍스를 실행할 때 열리는 솔리드웍스 프로그램 그 자체입니다. 

 

SldWorks 네임스페이스
   └─ SldWorks 클래스 (SldWorks.SldWorks)
         ├ 새 문서 만들기
         ├ 파일 열기/닫기
         ├ 프로그램 종료
         ├ 메시지 띄우기
         └ 다른 객체 접근 (예: ModelDoc2, SelectionMgr 등)

 

이번에는 두번째 줄을 봅시다. 

 

Dim swModel As ModelDoc2

 

swModel 이라는 변수를 ModelDoc2 라는 자료형으로 선언한 것입니다. ModelDoc2는 솔리드웍스 프로그램 안에 열려있는 하나의 문서입니다. 파트, 어셈블리, 도면 등이 될 수 있습니다. 

 

이번에는 세번째 줄을 봅시다. 

 

Dim swSketchMgr As SketchManager

 

swSketchMgr 이라는 변수를 SketchManager 이라는 자료형으로 선언한 것입니다. SketchManager 은 스케치 관련 작업을 담당하는 도구상자입니다.

 

SldWorks, ModelDoc2, SketchManager의 계층관계는 아래와 같습니다. 

 

SldWorks 네임스페이스 (안에 여러 클래스가 있음)
│
├─ SldWorks 클래스 (프로그램 전체를 제어하는 최상위 클래스)
│
├─ ModelDoc2 클래스 (열려 있는 문서를 조작하는 클래스)
│
├─ SketchManager 클래스 (스케치 작업 클래스)
│
└─ 그 외 FeatureManager, SelectionManager 등 다른 클래스들도 함께 존재

※ 하지만 사용하는 흐름은 이렇게 된다:

SldWorks 객체
   └→ ModelDoc2 객체 (SldWorks를 통해 열린 파일)
         └→ SketchManager 객체 (ModelDoc2 안에서 스케치 도구)

 

여기서 이런 질문이 생길 수 있습니다. SldWorks 클래스는 SldWorks.SldWorks 형태로 라이브러리를 명시해줬는데 왜 ModelDoc2 와 SketchManager 은 그렇게 하지 않는지 말입니다. 

 

ModelDoc2SketchManager 도 원래는 아래와 같이 써야 합니다. 

 

SldWorks.ModelDoc2

SldWorks.SketchManager

 

여기서 SldWorks 라는 네임스페이스를 생략한 것입니다. Sldworks 클래스에서는 Sldworks 네임스페이스 생략이 불가능해서 Sldworks.Sldworks 형태로 써주어야 하는데, 이유는 클래스와 네임스페이스 이름이 같기 때문입니다. Sldworks 라고만 쓰면 네임스페이스를 의미하는 건지 클래스를 의미하는 건지 알 수 없습니다. 

 

ModelDoc2 와 SketchManager  클래스 변수를 선언할 때 Sldworks 네임스페이스 생략이 가능한 이유를 더 이야기해보겠습니다. 이유는 네임스페이스 이름이 '참조'되어 있기 때문입니다. 어디에 참조되어 있는지 알아봅시다. 

 

VBA 편집기 메뉴 상단에서 [도구]-[참조]를 클릭합니다. 

 

 

다양한 라이브러리 들이 있는 것을 확인할 수 있습니다. 우리가 사용하고 있는 SldWorks 라이브러리는 위 그림에서 SldWorks 2024 Type Library 입니다. 이 라이브러리 안에 여러 네임스페이스가 있습니다. 

 

SldWorks 2024 Type Library  (= SolidWorks 라이브러리)
│
├─ SolidWorks.Interop.sldworks    ← 메인 API 클래스들 (SldWorks, ModelDoc2 등)
├─ SolidWorks.Interop.swmotionstudy   ← 모션 스터디 관련 API 묶음
├─ SolidWorks.Interop.swdimxpert      ← DimXpert (자동 치수/공차) 관련 API 묶음
├─ SolidWorks.Interop.swconst         ← 상수 값 모음 (선택 타입, 피처 타입 등)
├─ SolidWorks.Interop.swcommands      ← 커맨드(명령어) 관련 상수/ID 모음
├─ SolidWorks.Interop.sw3dprinter     ← 3D 프린터 기능 관련 API
└─ 등등 여러 개의 namespace...

 

어디서 이 내용을 알 수 있을까요? 솔리드웍스 공식 API 문서를 통해 알 수 있습니다. Namespace : Sldworks 라고 되어 있습니다. 

 

https://help.solidworks.com/2024/english/api/SWHelp_List.html?id=be61cebe2daa4cb3a8f14effbc58f032#Pg0

 

전체 계층 구조를 요약하면 아래와 같습니다. 

 

SolidWorks 2024 Type Library (라이브러리)
└─ SldWorks (네임스페이스)
     ├─ SldWorks 클래스
     ├─ ModelDoc2 클래스
     ├─ SketchManager 클래스
     ├─ FeatureManager 클래스
     ├─ SelectionMgr 클래스
     └─ 기타 클래스들

 

다음시간에는 main 함수 안에 있는 코드들을 이해해봅시다. 

반응형