본문 바로가기
  • Welcome!
VBA SOLIDWORK

2. SldWorks.ModelDoc2 개념

by ToolBOX01 2024. 12. 24.
반응형

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를 사용하세요.