프로그램 예상 이미지 : AI로 이미지를 만들어, 한글 내용이 이상(?) 합니다. 참고만 하십시요

실행 중인 Creo에 연결한 뒤 메시지 창을 띄우는 코드를 만들어 봅니다. Creo API를 사용하여 메시지 창(팝업 다이얼로그)을 띄우는 코드를 작성 하려면, 두 가지 방법이 있습니다. 첫 번째는 Creo UI 내부에 메시지 창을 띄우는 Creo API 전용 방식이고, 두 번째는 Java 표준 라이브러리인 Swing(JOptionPane) 방식입니다.
import com.ptc.pfc.pfcAsyncConnection.*;
import com.ptc.pfc.pfcSession.*;
import com.ptc.pfc.pfcGlobal.*;
public class CreoConnector {
public static void main(String[] args) {
Session session = null;
AsyncConnection connection = null;
try {
// 1. 비동기 라이브러리 로드 (pfcasyncmt)
System.loadLibrary("pfcasyncmt");
// 2. 현재 실행 중인 Creo 세션에 연결 시도
// Connect(사용할실행파일, 호스트명, 텍스트패스, 타임아웃초)
// 빈 문자열 전달 시 기본 설정 및 로컬 호스트를 사용합니다.
connection = pfcAsyncConnection.AsyncConnection_Connect(null, null, null, 10);
if (connection != null) {
// 3. 연결된 세션 객체 가져오기
session = connection.GetSession();
System.out.println("Creo 연결 성공!");
System.out.println("현재 작업 디렉토리: " + session.GetCurrentDirectory());
// 이곳에 추가적인 자동화 코드를 작성하세요. (모델 열기, 매개변수 수정 등)
} else {
System.out.println("Creo를 찾을 수 없거나 연결에 실패했습니다.");
}
} catch (Exception e) {
System.err.println("오류 발생: " + e.getMessage());
e.printStackTrace();
} finally {
// 4. 연결 해제 (필요 시)
try {
if (connection != null) {
// 세션을 종료하지 않고 연결만 끊으려면 Disconnect() 사용
connection.Disconnect(1);
System.out.println("연결이 안전하게 종료되었습니다.");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
코드 설명
- System.loadLibrary("pfcasyncmt"):
Java에서 Creo와 통신하기 위한 네이티브 라이브러리를 로드합니다. - pfcAsyncConnection.AsyncConnection_Connect(...):
가장 핵심적인 부분으로, 이미 실행 중인 Creo 프로세스를 찾아 핸들을 가져옵니다. - connection.GetSession():
연결된 세션에서 실제 API 제어권을 가진 Session 객체를 반환합니다.
이 객체를 통해 모델을 열거나 파라미터를 읽는 등 모든 자동화 작업을 수행할 수 있습니다. - connection.Disconnect(1):
프로그램 종료 시 Creo 프로세스는 그대로 둔 채 Java와의 통신 연결만 끊습니다.
1. 연결 성공 시 (Creo가 실행 중일 때)
Java 프로그램이 현재 실행 중인 Creo 프로세스를 정상적으로 찾아 연결하면 콘솔(Console)창에 다음과 같은 메시지가 출력됩니다.
Creo 연결 성공!
현재 작업 디렉토리: C:\Users\Documents\Work_Folder
연결이 안전하게 종료되었습니다.
설명: session.GetCurrentDirectory()를 통해 현재 Creo에서 설정된 작업 경로가 표시되며, 프로그램이 종료되면서 연결이 해제됩니다.
2. 연결 실패 시 (주요 케이스)
A. Creo가 켜져 있지 않은 경우
Creo를 찾을 수 없거나 연결에 실패했습니다.
B. 라이브러리 설정 오류 (pfcasyncmt.dll을 못 찾을 때):
오류 발생: no pfcasyncmt in java.library.path
java.lang.UnsatisfiedLinkError: no pfcasyncmt in java.library.path ...
원인:
PATH 환경 변수에 Creo의 lib 폴더가 등록되지 않았거나, 64비트 JDK와 64비트 Creo 버전이 일치하지 않을 때 발생합니다.
C. 환경 변수 미설정 오류:
오류 발생: pfcExceptions$XToolkitNotFound
원인:
PRO_COMM_MSG_EXE 환경 변수가 설정되지 않아 Java가 Creo와 통신할 브릿지 프로그램을 실행하지 못할 때 발생합니다.
위 코드는 화면에 무언가 창을 띄우는 것이 아니라, "내 Java 프로그램이 이제부터 Creo를 조종할 수 있는 상태가 되었는가?"를 확인하는 통로를 만드는 역할을 합니다. 이후에 session.GetActiveModel() 같은 코드를 추가하면 현재 열려 있는 3D 모델의 이름을 가져오거나 치수를 변경하는 등의 실제적인 자동화 결과물(치수 변경, 파일 저장 등)을 볼 수 있게 됩니다.
위 코드를 활용 하여, 실행 중인 Creo에 연결한 뒤 메시지 창을 띄우는 코드 입니다. Creo 내부 스타일 메시지 창 (Session API 사용) 방법, java Swing 메시지 창 (JOptionPane 사용) 2가지가 있습니다.
방법 1: Creo 내부 스타일 메시지 창 (Session API 사용)
이 방식은 Creo 프로그램의 인터페이스와 동일한 디자인의 메시지 창을 띄웁니다.
import com.ptc.pfc.pfcAsyncConnection.*;
import com.ptc.pfc.pfcSession.*;
import com.ptc.pfc.pfcUI.*;
import com.ptc.pfc.pfcGlobal.*;
public class CreoNativeDialog {
public static void main(String[] args) {
AsyncConnection connection = null;
try {
// 1. 라이브러리 로드 및 연결
System.loadLibrary("pfcasyncmt");
connection = pfcAsyncConnection.AsyncConnection_Connect(null, null, null, 10);
Session session = connection.GetSession();
// 2. 메시지 창 옵션 설정
MessageDialogOptions options = pfcUI.MessageDialogOptions_Create();
options.SetDialogLabel("Java API 알림"); // 창 제목
options.SetMessageDialogType(MessageDialogType.MESSAGE_INFO); // 아이콘 (INFO, WARNING 등)
// 3. 메시지 내용 작성 (현재 작업 디렉토리 정보 포함)
String workDir = session.GetCurrentDirectory();
String msg = "Creo에 성공적으로 연결되었습니다!\n현재 경로: " + workDir;
// 4. Creo 내부 메시지 창 출력
session.UIShowMessageDialog(msg, options);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (connection != null) connection.Disconnect(1);
} catch (Exception e) {}
}
}
}
방법 2: Java Swing 메시지 창 (JOptionPane 사용)
외부 제어 프로그램(UI)을 만들 때 가장 많이 사용하는 방식입니다. Creo와 별개로 Java 팝업이 뜹니다.
import com.ptc.pfc.pfcAsyncConnection.*;
import com.ptc.pfc.pfcSession.*;
import javax.swing.JOptionPane;
public class CreoSwingDialog {
public static void main(String[] args) {
AsyncConnection connection = null;
try {
// 1. 라이브러리 로드 및 연결
System.loadLibrary("pfcasyncmt");
connection = pfcAsyncConnection.AsyncConnection_Connect(null, null, null, 10);
if (connection != null) {
Session session = connection.GetSession();
String dir = session.GetCurrentDirectory();
// 2. Java 표준 Swing 메시지 창 출력
JOptionPane.showMessageDialog(
null,
"연결 성공!\n작업 경로: " + dir,
"연결 결과",
JOptionPane.INFORMATION_MESSAGE
);
}
} catch (Exception e) {
// 연결 실패 시 오류 메시지 출력
JOptionPane.showMessageDialog(null, "연결 실패: " + e.getMessage(), "오류", JOptionPane.ERROR_MESSAGE);
e.printStackTrace();
} finally {
try {
if (connection != null) connection.Disconnect(1);
} catch (Exception e) {}
}
}
}
환경 변수(PRO_COMM_MSG_EXE)와 라이브러리(pfcasyncmt.dll, pfcasync.jar) 설정이 완료된 상태여야 동작 합니다.
▣ OTK Java의 핵심 동작 원리
OTK Java는 동기 방식(Synchronous)과 비동기 방식(Asynchronous) 두 가지 아키텍처를 지원합니다.
- 동기 방식 (In-Process):
Java 코드가 Creo 프로세스 내부에서 실행됩니다. 속도가 매우 빠르고 메뉴 버튼 등을 직접 제어하기 좋습니다. - 비동기 방식 (Out-of-Process):
별도의 Java 프로그램이 외부에서 실행되어 이미 켜져 있는 Creo에 접속합니다.
UI 개발이 자유롭고 독립적인 툴을 만들기 좋습니다.
⊙ 동기 방식 (In-Process):
동기 방식(In-Process)은 Java 코드가 Creo의 메모리 공간 안에서 함께 실행되는 방식입니다. 이 방식은 별도의 통신 채널을 거치지 않기 때문에 속도가 매우 빠르고, Creo 리본 메뉴에 버튼을 직접 추가하여 사용자 인터페이스(UI)를 확장할 수 있다는 강력한 장점이 있습니다.
1. 필수 파일 및 디렉토리 구조 구성 하기
동기 방식으로 실행하려면 특정 폴더 구조를 갖추는 것이 관리하기 편리합니다.
- bin/: 컴파일된 .class 파일 또는 .jar 파일
- text/: 버튼 이름, 메시지 등이 담긴 텍스트 파일 폴더 (필수)
- creotk.dat: Creo에게 개발한 프로그램의 정보를 알려주는 설정 파일
예시
C:\PTC\ToolBOX
L \jre\bin
L \text
L ToolBOXApp.jar
2. creotk.dat 파일 작성
이 파일은 Java 프로그램의 "주민등록증"과 같습니다. 메모장으로 작성하여 프로그램 폴더에 저장합니다.
NAME MyCreoApp
EXEC_FILE D:\MyProject\bin\MyApplication.jar
TEXT_DIR D:\MyProject\text
STARTUP java
ALLOW_STOP TRUE
DELAY_START FALSE
END
- NAME: 보조 응용 프로그램 목록에 표시될 이름
- EXEC_FILE: 실행할 jar 파일의 전체 경로
- TEXT_DIR: 메뉴 및 메시지 파일이 있는 폴더 경로
- STARTUP: 반드시 java로 설정 (동기 방식임을 명시)
3. Creo에 프로그램 등록 (2가지 방법)
방법 A: config.pro에 등록 (자동 실행)
Creo를 켤 때마다 프로그램이 자동으로 로드되길 원한다면 이 방법을 사용합니다.
- Creo의 설정 파일인 config.pro를 엽니다.
- creotkdat D:\MyProject\creotk.dat 항목을 추가합니다.
- Creo를 재시작하면 프로그램이 자동으로 메모리에 로드됩니다.
방법 B: 보조 응용 프로그램 메뉴에서 수동 등록
테스트 단계에서 자주 사용하는 방법입니다.
- Creo 상단 메뉴: 파일(File) > 옵션(Options) > 보조 응용 프로그램(Auxiliary Applications).
- 오른쪽의 등록(Register) 버튼을 클릭합니다.
- 작성해둔 creotk.dat 파일을 선택합니다.
- 목록에 이름이 뜨면 해당 항목을 선택하고 **시작(Start)**을 누릅니다.
Creo가 외부에서 개발된 응용 프로그램(Toolkit)을 인식하고 로드하기 위한 환경 변수들
1. creotkdat (환경 변수 및 설정 항목)
- 용도: Java 기반의 Toolkit(J-Link, OTK Java)을 등록할 때 사용합니다.
- 특징: config.pro 파일 내에서 creotkdat [파일경로] 형태로 작성하거나, 시스템 환경 변수로 등록할 수 있습니다.
- 대상 파일: .dat 형식의 텍스트 파일(내부에 STARTUP java가 포함된 파일)을 가리킵니다.
2. protkdat (환경 변수 및 설정 항목)
- 용도: C/C++ 기반의 Toolkit(Creo TOOLKIT, OTK C++)을 등록할 때 사용합니다.
- 특징: 가장 고전적이고 강력한 C 기반 라이브러리(.dll)를 로드할 때 쓰입니다.
- 설정: config.pro 내에서 protkdat [파일경로] 형태로 사용합니다.
3. prodevdat (환경 변수 및 설정 항목)
- 용도: 과거 Pro/DEVELOP이라는 구형 API를 위해 사용되던 변수입니다.
- 현재 상황: 현재 Creo 버전에서는 거의 사용되지 않으며, 최신 개발 환경에서는 protkdat나 creotkdat로 대체되었습니다.
4. toolkit_registry_file (Config.pro 옵션)
- 용도: 모든 종류의 Toolkit 등록 파일(.dat)을 Creo에 인식시키는 가장 현대적이고 표준적인 config.pro 옵션입니다.
- 특징: 과거에는 언어에 따라 protkdat, creotkdat를 구분해서 썼지만, 최근에는 이 옵션 하나로 C, Java, JS 기반의 등록 파일을 모두 지정할 수 있습니다

'업무 자동화 > VBA, VB.NET For Creo' 카테고리의 다른 글
| 모델의 요소를 가져오는 순서 (The order in which the model's elements are retrieved) (0) | 2025.12.05 |
|---|---|
| 솔리드 모델의 동일한 실린더 서피스 중심 위치 및 직경 값 구하기 (0) | 2025.11.21 |
| Interface IpfcTransformedSurface (0) | 2025.11.21 |
| 솔리드 모델의 실린더 서피스 수량 계산 (0) | 2025.11.20 |
| 모델에서 제일 작은 서피스 평면 면적 구하기 (0) | 2025.11.19 |