□ Visual Basic.NET 애플리케이션
VB API를 사용하여 다음 작업을 수행할 수 있습니다.
- VB.NET 폼을 생성하여 그래픽 사용자 인터페이스 없이 소프트웨어를 시작하거나 연결하고, 사용자 입력을 받아 모델 수정 또는 결과물을 생성할 수 있습니다.(그래픽 사용자 인터페이스(GUI) 없이 Creo 소프트웨어를 시작하거나 연결하고, 사용자 입력을 받아 모델 수정 또는 결과물을 생성하는 방식)
- 자체 사용자 인터페이스(UI)를 가지거나 가지지 않을 수 있는 VB.NET 애플리케이션을 생성할 수 있습니다. 이 애플리케이션은 세션 내에서 하나 이상의 UI 또는 이벤트 리스너를 설정하고, VB.NET 코드를 사용하여 해당 이벤트를 처리할 수 있습니다.
▷ Crei VB.NET 개발 환경 설정
Creo VB API 애플리케이션을 개발하고 실행하기 위해 추가적인 라이선스는 필요하지 않습니다.
만약 Creo VB API Toolkit이 이미 설치되어 있다면, Creo 설치 폴더 안에서 관련 파일과 폴더를 확인할 수 있습니다.
From Creo 5.0 to Creo 8.0 : Creo 설치가 완료되면, 폴더 및 파일 이름을 확인 하십시요
- <Load point>\Common Files\vbapi
- <Load point>\Common Files\%PRO_MACHINE_TYPE%\obj\pfclscom.exe
- <Load point>\Parametric\bin\vb_api_register.bat and vb_api_unregister.bat
다음과 같이 VB.NET 사용을 위한 설정을 합니다.
1. PTC Creo Parametric VB API 타입의 COM 라이브러리를 등록하려면, 배치 파일을 실행해야 합니다.
- 컴퓨터가 VB API(Visual Basic Application Programming Interface)를 인식하고 사용할 수 있도록 필요한 설정이
자동으로 등록 (COM 라이브러리 등록)
COM 라이브러리 등록은 API와 Creo 간의 연결을 설정하는 과정이라고 생각하면 됩니다.
- \Parametric\bin\vb_api_register.bat 파일을 관리자 모드에서 실행 합니다
2. Window 환경 설정
PRO_COMM_MSG_EXE=D:\PTC\CRE9.0\COMMON~1\\86e_win64\obj\pro_comm_msg.exe
PRO_DIRECTORY=D:\PTC\CREO9.0\COMMON~1
PFCLS_START_DIR=C:\TEMP
3. 프로젝트 선택 > 참조 메뉴에서 오른쪽 마우스 클릭 > 참조 추가 선택 (아래 그림을 참고 하십시요)
라이브러리 추가 합니다.
□ Visual Basic.NET 예외 처리
VB.NET에서 Try는 예외 처리를 위해 사용됩니다. Try 블록은 프로그램 실행 중 발생할 수 있는 예외를 감지하고 처리할 수 있도록 합니다. 예외는 코드 실행 중에 발생하는 예기치 않은 오류로, 이를 적절히 처리하지 않으면 프로그램이 충돌할 수 있습니다.
Try 블록은 일반적으로 Catch, Finally와 함께 사용됩니다. 기본 구조는 아래와 같습니다.
Try
'// 예외가 발생할 가능성이 있는 코드
Catch ex As Exception
'// 예외가 발생했을 때 실행할 코드
Finally
'// 예외 발생 여부와 상관없이 항상 실행되는 코드 (선택적)
End Try
▷ 주요 구성 요소
- Try 블록: 예외가 발생할 가능성이 있는 코드를 작성하는 부분입니다.
- Catch 블록:특정 예외가 발생했을 때 이를 처리하는 코드입니다.
여러 개의 Catch 블록을 사용하여 다양한 예외 유형을 처리할 수 있습니다. - Finally 블록: 예외가 발생했는지 여부와 관계없이 항상 실행됩니다.
파일 닫기, 리소스 해제 등 정리 작업에 유용합니다. (선택적)
▷ 예제
1) 예제 코드 - 기본 예외 처리
Try
Dim number As Integer = Convert.ToInt32("123a") '// 예외 발생
Catch ex As FormatException
Console.WriteLine("형식 변환 오류 발생: " & ex.Message)
Catch ex As Exception
Console.WriteLine("알 수 없는 오류 발생: " & ex.Message)
Finally
Console.WriteLine("예외 처리 완료.")
End Try
결과 출력 :
- number 변수의 유형은 정수 입니다. "123a"은 문자가 포함 되어 있습니다.
- Integer 데이터 형식은 32비트 프로세서에서 최적의 성능을 제공합니다.
형식 변환 오류 발생: 입력 문자열의 형식이 잘못되었습니다.
예외 처리 완료.
2) 예제 코드 - Finally 블록 사용
Try
Dim result As Integer = 10 / 0 '// 0으로 나누기 예외 발생
Catch ex As DivideByZeroException
Console.WriteLine("0으로 나눌 수 없습니다: " & ex.Message)
Finally
Console.WriteLine("프로그램이 종료되었습니다.")
End Try
결과 출력 :
- result 값은 정수 입니다.
0으로 나눌 수 없습니다: 0으로 나눌 수 없습니다.
프로그램이 종료되었습니다.
▷ 주요 포인트
- 예외 처리의 중요성:
예외 처리를 통해 프로그램이 갑작스럽게 종료되는 것을 방지하고, 사용자에게 유용한 메시지를 제공할 수 있습니다. - 구체적인 예외 처리:
구체적인 예외(FormatException, DivideByZeroException 등)를 먼저 처리하고, 일반적인 예외(Exception)는 나중에 처리하는 것이 좋습니다. - Finally의 활용: 파일 닫기, 데이터베이스 연결 해제 등 리소스 정리가 필요한 경우에 Finally 블록을 활용합니다.
□ Creo 모델 이름 가져오기
"Click" 버튼을 클릭하면, 현재 활성화된 Creo 모델 이름 가져오기는 기능
▷ "Click" 버튼 코드
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim AConnection As IpfcAsyncConnection
Dim CConnection As New CCpfcAsyncConnection
Dim BSession As IpfcBaseSession
Dim Model As IpfcModel
Try
If Not AConnection Is Nothing Then
AConnection = CConnection.GetActiveConnection
Else
AConnection = (New CCpfcAsyncConnection).Connect(Nothing, Nothing, Nothing, Nothing)
End If
BSession = AConnection.Session
Model = BSession.CurrentModel
MsgBox(Model.FileName)
Catch ex As Exception
MsgBox("ok")
End Try
End Sub
End Class
IpfcAsyncConnection : 이 클래스는 Creo Parametric에 대한 비동기 연결을 나타냅니다.
AConnection = CConnection.GetActiveConnection
애플리케이션이 Creo Parametric과 연결된 경우, 이 함수를 호출하여 연결 객체를 가져올 수 있습니다.
Function CCpfcAsyncConnection.GetActiveConnection () as IpfcAsyncConnection [optional]
▷ 아래 코드를 참고 하였습니다.
Sample Code (pfcAsynchronousModeExamples.vb)
'======================================================================
' HISTORY
'
' 19-Mar-07 L-01-26 SNV ##1 Created
' 17-Apr-07 L-01-30 JCN $$1 Submitted
' 13-Jun-07 L-01-33 SNV $$2 Added working directory options
' 07-Jul-11 P-10-03 sbinawad $$3 Updated form Rebranding
'======================================================================
Imports pfcls
Public Class pfcAsynchronousModeExamples
'Async start example
'======================================================================
'Function : runProE
'Purpose : This function makes Creo Parametric run in batch mode,
' without user input. The application starts Creo
' Parametric, performs the designated operations, and
' shuts down Creo Parametric.
'======================================================================
Public Sub runProE(ByVal exePath As String, ByVal workDir As String)
Dim asyncConnection As IpfcAsyncConnection = Nothing
Dim cAC As CCpfcAsyncConnection
Dim session As IpfcBaseSession
Try
'======================================================================
'First Argument : The path to the Creo Parametric executable along with
' Command() line options. -i and -g flags make Creo Parametric run in
' non-graphic, 'non-interactive mode.
'Second Argument: String path to menu and message files.
'======================================================================
cAC = New CCpfcAsyncConnection
asyncConnection = cAC.Start(exePath + " -g:no_graphics -i:rpc_input", ".")
session = asyncConnection.Session
'======================================================================
'Set working directory
'======================================================================
asyncConnection.Session.ChangeDirectory(workDir)
'======================================================================
'VB api process calls and other processing to be done
'======================================================================
Dim descModel As IpfcModelDescriptor
Dim model As IpfcModel
descModel = (New CCpfcModelDescriptor).Create(EpfcModelType.EpfcMDL_PART, _
"partModel.prt", Nothing)
model = session.RetrieveModel(descModel)
Catch ex As Exception
MsgBox(ex.Message.ToString + Chr(13) + ex.StackTrace.ToString)
Finally
'======================================================================
'End the Creo Parametric session when done
'======================================================================
If Not asyncConnection Is Nothing AndAlso asyncConnection.IsRunning Then
asyncConnection.End()
End If
End Try
End Sub
End Class
'Full Async example
'======================================================================
'Class : pfcFullAsyncExample
'Purpose : This class demonstrates full async mode application.
' It first starts Creo Parametric and sets up action
' listeners for Creo Parametric events, in this case,
' the menu button and the termination listener.
'======================================================================
Public Class pfcFullAsyncExample
Private asyncConnection As pfcls.IpfcAsyncConnection
Public Sub New(ByVal exePath As String, ByVal workDir As String)
Try
startProE(exePath, workDir)
addTerminationListener()
addMenuAndButton()
asyncConnection.WaitForEvents()
Catch ex As Exception
MsgBox(ex.Message.ToString + Chr(13) + ex.StackTrace.ToString)
Finally
If Not asyncConnection Is Nothing AndAlso asyncConnection.IsRunning Then
asyncConnection.End()
End If
End Try
End Sub
'======================================================================
'Function : startProE
'Purpose : Start new Creo Parametric session and change to current
' directory.
'======================================================================
Private Sub startProE(ByVal exePath As String, ByVal workDir As String)
asyncConnection = (New CCpfcAsyncConnection).Start(exePath, ".")
asyncConnection.Session.ChangeDirectory(System.Environment.CurrentDirectory)
End Sub
'======================================================================
'Function : addTerminationListener
'Purpose : This function adds termination listener to the Creo
' Parametric session.
'======================================================================
Private Sub addTerminationListener()
Dim terminationListener As New ProEExitListener()
Try
asyncConnection.AddActionListener(terminationListener)
Catch ex As Exception
MsgBox(ex.Message.ToString + Chr(13) + ex.StackTrace.ToString)
End Try
End Sub
'======================================================================
'Class : ProEExitListener
'Purpose : This class must implement the listner interface along
' with the correct client interface name. The OnTerminate
' function is called when the Creo Parametric session is
' ended by the user.
'======================================================================
Private Class ProEExitListener
Implements IpfcAsyncActionListener
Implements ICIPClientObject
Implements IpfcActionListener
Public Function GetClientInterfaceName() As String Implements pfcls.ICIPClientObject.GetClientInterfaceName
GetClientInterfaceName = "IpfcAsyncActionListener"
End Function
Public Sub OnTerminate(ByVal _Status As Integer) Implements pfcls.IpfcAsyncActionListener.OnTerminate
Dim aC As pfcls.IpfcAsyncConnection
aC = (New CCpfcAsyncConnection).GetActiveConnection
aC.InterruptEventProcessing()
MsgBox("ProE Exited")
End Sub
End Class
'======================================================================
'Function : addMenuAndButton
'Purpose : This function demonstrates the usage of UI functions to
' add a new menu and button to Creo Parametric.
'======================================================================
Private Sub addMenuAndButton()
Dim session As pfcls.IpfcSession
Dim inputCommand As IpfcUICommand
Dim buttonListener As IpfcUICommandActionListener
Dim exitCommand As IpfcUICommand
Dim eListener As IpfcUICommandActionListener
Try
session = asyncConnection.Session
buttonListener = New ButtonListener()
eListener = New ExitListener()
'======================================================================
'Command is created which will be associated with the button. The class
'implementing the actionlistener must be given as input.
'======================================================================
inputCommand = session.UICreateCommand("INPUT", buttonListener)
exitCommand = session.UICreateCommand("EXIT", eListener)
'======================================================================
'Menu is created and buttons are created in the menu
'======================================================================
session.UIAddMenu("VB-Async", "Windows", "pfcAsynchronousModeExamples.txt", Nothing)
session.UIAddButton(exitCommand, "VB-Async", Nothing, _
"USER Exit Listener", "USER Exit Help", "pfcAsynchronousModeExamples.txt")
session.UIAddButton(inputCommand, "VB-Async", Nothing, _
"USER Async App", "USER Async Help", "pfcAsynchronousModeExamples.txt")
Catch ex As Exception
MsgBox(ex.Message.ToString + Chr(13) + ex.StackTrace.ToString)
End Try
End Sub
'======================================================================
'Class : ButtonListener
'Purpose : This class must implement the listner interface along
' with the correct client interface name. The OnCommand
' function is called when the user button is pressed.
'======================================================================
Private Class ButtonListener
Implements pfcls.IpfcUICommandActionListener
Implements ICIPClientObject
Public Function GetClientInterfaceName() As String _
Implements ICIPClientObject.GetClientInterfaceName
GetClientInterfaceName = "IpfcUICommandActionListener"
End Function
Public Sub OnCommand() Implements pfcls.IpfcUICommandActionListener.OnCommand
Me.UserFunction()
End Sub
Public Sub UserFunction()
MsgBox("User Button Pressed")
End Sub
End Class
'======================================================================
'Class : ExitListener
'Purpose : This class must implement the listner interface along
' with the correct client interface name. The OnCommand
' function is called when the user button is pressed to
' exit the session listener.
'======================================================================
Private Class ExitListener
Implements pfcls.IpfcUICommandActionListener
Implements ICIPClientObject
Public Function GetClientInterfaceName() As String _
Implements ICIPClientObject.GetClientInterfaceName
GetClientInterfaceName = "IpfcUICommandActionListener"
End Function
Public Sub OnCommand() Implements pfcls.IpfcUICommandActionListener.OnCommand
Me.UserFunction()
End Sub
Public Sub UserFunction()
Dim aC As pfcls.IpfcAsyncConnection
aC = (New CCpfcAsyncConnection).GetActiveConnection
aC.InterruptEventProcessing()
MsgBox("Listener Exited")
End Sub
End Class
End Class
'VBA, VB.NET For Creo' 카테고리의 다른 글
Creo VB API 개념 - Related Classes (0) | 2024.12.12 |
---|---|
Creo 모델 이름 표시하기 #2/2 (0) | 2024.12.09 |
Hello World . (Create a VB.NET program using Windows Form)#2 (0) | 2024.12.05 |
Hello World . (Create a VB.NET program using Windows Form)#1 (0) | 2024.12.05 |
Visual Studio 의 UI (0) | 2024.12.05 |