VBA SOLIDWORK

2. SldWorks.ModelDoc2 개념

ToolBOX01 2024. 12. 24. 12:08

SOLIDWORKS API에서 ModelDoc2는 모든 문서 유형(파트, 어셈블리, 도면)에 대한 공통적인 기능을 제공하는 인터페이스입니다. 즉, 파트, 어셈블리, 도면 문서를 가리키는 포인터 역할을 하며, 이를 통해 다양한 문서 속성에 접근하고 조작할 수 있습니다.

▷ ModelDoc2를 사용하면 다음과 같은 작업을 수행할 수 있습니다.

  • 문서 열기, 저장, 닫기: 파일 이름 변경, 파일 형식 변경 등 다양한 옵션을 사용하여 문서를 관리할 수 있습니다.
  • 문서 속성 조회 및 수정:
    문서 이름, 저장 경로, 작성자 등의 기본 정보부터 사용자 정의 속성까지 다양한 속성에 접근하여 조회하거나 수정할 수 있습니다.
  • 뷰 관리: 뷰 생성, 삭제, 활성화 등 뷰 관련 작업을 수행할 수 있습니다.
  • 측정: 거리, 각도, 면적 등을 측정할 수 있습니다.
  • 선택: 요소 선택, 선택 집합 관리 등 선택 관련 작업을 수행할 수 있습니다.
  • 기타: 인쇄, 미리보기, 문서 비교 등 다양한 기능을 사용할 수 있습니다.

예시 코드 :  현재 활성화된 문서의 이름을 출력하고, 다른 이름으로 저장하는 간단한 예시입니다.

'// SOLIDWORKS 어플리케이션 객체 가져오기
Dim swApp As SldWorks.SldWorks = GetObject(, "SldWorks.Application")

'// 현재 활성화된 문서 가져오기
Dim swModel As SldWorks.ModelDoc2 = swApp.ActiveDoc

'// 문서 이름 출력
MsgBox swModel.GetTitle()

'// 문서 저장
swModel.SaveAs2 "C:\Temp\NewDocument.sldprt", 1, 0, ""

 

▷ IModelDoc2 Interface Members

 

IModelDoc2 Interface Members - 2023 - SOLIDWORKS API Help

 

help.solidworks.com


예시 코드 :  모델이 가지고 있는 Feature의 개수

    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swFeature As SldWorks.Feature
    Dim featureCount As Integer
Sub ModelFeatureCount()
    
    Set swApp = GetObject(, "SldWorks.Application")
    Set swModel = swApp.ActiveDoc
    Set swFeature = swModel.FirstFeature()
    featureCount = 0

    Do While Not swFeature Is Nothing
        featureCount = featureCount + 1
        Set swFeature = swFeature.GetNextFeature()
    Loop
    Debug.Print featureCount

End Sub

Dim swApp As SldWorks.SldWorks
Set swApp = GetObject(, "SldWorks.Application")
현재 실행된 솔리드웍스 프로그램 개체를 변수 "swApp"에 가져옵니다.

Dim swModel As SldWorks.ModelDoc2
Set swModel = swApp.ActiveDoc
현재 활성된 모델의 개체를 "swModel"에 가져 옵니다

Dim swFeature As SldWorks.Feature
Set swFeature = swModel.FirstFeature()
모델의 개체중 첫번째 Feature를 가져 옵니다 

위 코드는 마지막 Feature 까지 수량을 순차적으로 더해 표시합니다

▷Do While...Loop

Do While...Loop는 특정 조건이 참일 때 반복 실행되는 루프 구조입니다. 조건을 평가한 후 반복 여부를 결정하며, 조건이 거짓(False)이 되면 루프가 종료됩니다.

Do While 조건
    ' 반복 실행할 코드
Loop

 

  • 조건 검사 위치:
    1. 조건은 루프 시작 부분에서 평가됩니다. 따라서, 조건이 처음부터 거짓(False)이라면 루프는 한 번도
    실행되지 않습니다.
  • 반복 종료:
    1. 조건이 참(True)인 동안 계속 실행됩니다.
    2. 루프 내부에서 조건을 거짓으로 만들어야 무한 루프를 방지할 수 있습니다.

예제 1: 간단한 반복
아래는 Do While 루프를 사용하여 숫자를 출력하는 코드입니다

Sub DoWhileExample()
    Dim i As Integer
    i = 1
    Do While i <= 5
        Debug.Print i ' 즉, 출력 창에 1, 2, 3, 4, 5 출력
        i = i + 1     ' i를 1씩 증가
    Loop
End Sub


작동 과정:
1. i가 5보다 작거나 같을 동안 반복 실행합니다.
2. 루프를 한 번 실행할 때마다 i가 1씩 증가합니다.
3. 조건이 거짓(False)이 되면 종료됩니다.

 

예제 2: 사용자 입력받기
사용자가 입력한 값이 특정 조건을 만족할 때까지 반복 합니다.

Sub DoWhileInputExample()
    Dim userInput As String
    Do While userInput <> "exit"
        userInput = InputBox("값을 입력하세요. 'exit'를 입력하면 종료됩니다.")
    Loop
    MsgBox "종료합니다!"
End Sub


작동 과정:
1. InputBox를 통해 값을 입력받습니다.
2. 사용자가 "exit"를 입력하기 전까지 계속 반복됩니다

 

예제 3: 무한 루프 방지
조건이 항상 참(True)일 경우 루프가 무한히 실행될 수 있으므로, 내부에서 루프를 종료하도록 해야 합니다.
예를 들어, Exit Do를 사용하여 특정 상황에서 강제로 종료할 수 있습니다.

Sub InfiniteLoopPrevent()
    Dim count As Integer
    count = 0
    Do While True
        count = count + 1
        Debug.Print count
        If count >= 10 Then Exit Do ' 10 이상이면 종료
    Loop
End Sub

요약
1. Do While...Loop는 조건이 참일 동안 반복됩니다.
2. 조건은 루프 시작 시 평가되며, 조건이 처음부터 거짓이면 실행되지 않습니다.
3. 무한 루프를 방지하려면 조건을 적절히 설정하거나 Exit Do를 사용하세요.