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
예시 코드 : 모델이 가지고 있는 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를 사용하세요.
'VBA SOLIDWORK' 카테고리의 다른 글
모델의 Feature Name, Type, ID 및 Dimensions Name, value 가져오기 (0) | 2024.12.25 |
---|---|
3.SldWorks.Feature 개념 (0) | 2024.12.25 |
1. SldWorks.SldWorks 개념 (0) | 2024.12.24 |
SOLIDWORKS 매크로 및 애드인 개발을 위한 API 개체 모델 이해 (0) | 2024.12.23 |
BOM 컨셉 코드 (1) | 2024.12.20 |