본문 바로가기
  • Welcome!
VBA SOLIDWORK

SOLIDWORKS 매크로 및 애드인 개발을 위한 API 개체 모델 이해

by ToolBOX01 2024. 12. 23.
반응형

SOLIDWORKS 매크로 또는 애드인을 개발하기 위해서는 API 개체 모델에 대한 깊이 있는 이해가 필수적입니다. API 개체 모델은 SOLIDWORKS의 다양한 기능과 요소들을 객체로 표현하여 프로그래밍 방식으로 제어할 수 있도록 하는 구조입니다.

□ 주요 개체 간의 상호 작용

- SOLIDWORKS API 개체 모델에서 가장 중요한 몇 가지 개체와 그들의 상호 작용

  • SldWorks:
    전체 SOLIDWORKS 응용 프로그램을 나타내는 최상위 객체입니다. 다른 모든 객체에 대한 접근점을 제공합니다.
  • ModelDoc2: 하나의 SOLIDWORKS 문서(파트, 어셈블리, 도면 등)를 나타냅니다.
  • Feature: 모델의 특징(스케치, 돌출, 구멍 등)을 나타냅니다.
  • Component: 어셈블리 환경에서 부품을 나타냅니다.
  • Sketch: 스케치 엔티티(선, 원, 호 등)를 나타냅니다.

개체와 그들의 상호 작용  예시:

  • 새로운 파트 문서 생성:
    - SldWorks 객체를 통해 새로운 ModelDoc2 객체를 생성합니다.
    - 생성된 ModelDoc2 객체를 활성화합니다.
  • 스케치 생성:
    - 활성화된 ModelDoc2 객체를 통해 새로운 Sketch 객체를 생성합니다.
    - Sketch 객체를 이용하여 선, 원 등을 그립니다.
  • 돌출 피처 생성:
    - Sketch 객체를 기반으로 새로운 Feature 객체(돌출 피처)를 생성합니다.

 

개체 간의 관계

  • 계층 구조: SldWorks는 최상위에 위치하며, 그 아래에 ModelDoc2, Feature, Component 등이 계층적으로 구성됩니다
  • 포함 관계: ModelDoc2는 여러 개의 Feature를 포함할 수 있습니다.
  • 연관 관계: Feature는 생성 시 참조하는 Sketch 객체와 연관되어 있습니다.


    

 

 

▷ the basics – SldWorks, ModelDoc2

 

SOLIDWORKS API: the basics - SldWorks, ModelDoc2 (part 2)

What is the SldWorks object? Learn how to work with ModelDoc2, parts, assemblies and drawings. Part 2 in a series on the API basics.

cadbooster.com

 

 

 

▷ the basics – SldWorks, ModelDoc2

 

 

 

 

 

 

 

 

 

▷주요 코드

swModel.Extension.SelectByID2(dimensionNames(i), "DIMENSION", 0, 0, 0, False, 0, Nothing, 0)

메서드는 SolidWorks API에서 특정 객체(피처, 치수 등)를 이름, 유형, 위치를 기반으로 선택하는 데 사용됩니다.
이 메서드의 기본 문법과 주요 매개변수를 아래와 같이 설명하겠습니다.

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDim As SldWorks.Dimension
Dim boolstatus As Boolean

Set swApp = GetObject(, "SldWorks.Application")
Set swModel = swApp.ActiveDoc
Msgbox swModel.GetTitle '// 현재 활성화된 문서 가져오기 (part01)

 '// 치수 선택
 boolstatus = swModel.Extension.SelectByID2(dimensionNames(i), "DIMENSION", 0, 0, 0, False, 0, Nothing, 0)

 

▷ 매개변수 설명

매개변수 설명 데이터 유형 예시
Name 선택하려는 객체의 이름
(예: 피처 이름, 치수 이름).
String "Boss-Extrude1",
"D1@Sketch1"
Type 선택하려는 객체의 유형
(예: 피처, 스케치, 치수 등)
String "FEATURE", "DIMENSION"
X, Y, Z 선택할 객체의 위치(모델의 좌표값, 선택하지 않을 경우 0 사용). Double 0, 0, 0
Append 선택한 객체를 기존 선택에 추가할지 여부(True = 추가, False = 대체). Boolean True, False
Mark 선택된 객체의 마크 번호. 일반적으로 0을 사용. Integer 0
Callout 선택된 객체에 대한 사용자 정의 데이터. 일반적으로 Nothing을 사용. Variant Nothing
Options 선택 옵션(보통 0 사용). Integer 0

 

▷  사용 예시

1. 피처 선택 예시

Dim boolstatus As Boolean
boolstatus = swModel.Extension.SelectByID2("Boss-Extrude1", "FEATURE", 0, 0, 0, False, 0, Nothing, 0)

If boolstatus Then
    MsgBox "피처 선택 성공!"
Else
    MsgBox "피처를 선택할 수 없습니다."
End If


"Boss-Extrude1": 선택하려는 피처 이름.
"FEATURE": 피처 유형.
"False": 기존 선택을 대체.

 

2. 치수 선택 예시

Dim boolstatus As Boolean
boolstatus = swModel.Extension.SelectByID2("D1@Sketch1", "DIMENSION", 0, 0, 0, False, 0, Nothing, 0)

If boolstatus Then
    MsgBox "치수 선택 성공!"
Else
    MsgBox "치수를 선택할 수 없습니다."
End If


"D1@Sketch1": 스케치에서 치수 이름.
"DIMENSION": 치수 유형.

 

3. 스케치 선택 예시

Dim boolstatus As Boolean
boolstatus = swModel.Extension.SelectByID2("Sketch1", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)

If boolstatus Then
    MsgBox "스케치 선택 성공!"
Else
    MsgBox "스케치를 선택할 수 없습니다."
End If

"Sketch1": 선택하려는 스케치의 이름.
"SKETCH": 스케치 유형.

 

4. 위치 기반 선택 예시

Dim boolstatus As Boolean
boolstatus = swModel.Extension.SelectByID2("", "VERTEX", 0.05, 0.1, 0.2, False, 0, Nothing, 0)

If boolstatus Then
    MsgBox "위치 기반 객체 선택 성공!"
Else
    MsgBox "위치에 객체가 없습니다."
End If

"VERTEX": 선택하려는 객체가 점(vertex)일 때 사용.
X, Y, Z: 모델에서 점의 위치 좌표.

 

5. 기존 선택에 추가

Dim boolstatus As Boolean
boolstatus = swModel.Extension.SelectByID2("Boss-Extrude2", "FEATURE", 0, 0, 0, True, 0, Nothing, 0)

If boolstatus Then
    MsgBox "피처가 기존 선택에 추가되었습니다!"
Else
    MsgBox "피처를 추가할 수 없습니다."
End If

True: 기존 선택에 추가.
기존 선택한 객체를 유지하면서 새로운 객체를 선택.

 

▷   주의 사항

1. 정확한 이름 사용:
Name 값은 SolidWorks 모델 내에서 정확히 일치해야 합니다. (예: "D1@Sketch1", "Boss-Extrude1")
이름이 다르면 선택에 실패합니다.

2. 객체 유형 확인:
Type 값은 객체의 유형과 정확히 일치해야 합니다.
잘못된 유형을 사용하면 선택에 실패합니다.

3. 좌표 기반 선택:
X, Y, Z 값은 선택할 객체가 존재하는 정확한 좌표여야 합니다.
좌표가 맞지 않으면 객체를 찾지 못합니다.

4.SolidWorks 환경 설정:
swModel 객체는 활성 문서를 나타냅니다. 활성 문서가 없는 경우 GetObject를 사용해 가져와야 합니다.