PTC Creo ile ilk J-link Bağlantısının Kurulması “HelloWorld” Part-2

creo-homepage-banner[1]

Creo bilgi ekranında “jlinkhelloworld.java” dosyasında “hello world” yazdıran ilk program kodumuz aşağıdaki gibidir.


// jlinkhelloworld.java
// imports required
import com.ptc.cipjava.*;
import com.ptc.pfc.pfcCommand.*;
import com.ptc.pfc.pfcGlobal.*;
import com.ptc.pfc.pfcModel.*;
import com.ptc.pfc.pfcSession.*;
import com.ptc.wfc.wfcModel.*;
import com.ptc.wfc.wfcGeometry.*;
import com.ptc.wfc.wfcSolid.*;
import com.ptc.wfc.wfcPart.*;
import java.io.*;

public class jlinkhelloworld {

static jlinkhelloworld App = null;
String programName = null;
Session session = null;
FileWriter log = null;
String msgFile = "msg_jlinkhelloworld.txt";
String newline = null;

// constructor
//
public jlinkhelloworld () {
programName = this.getClass().getName();
try {
log = new FileWriter(programName + ".log");
newline = System.getProperty("line.separator");
}
catch (Exception e) {
// couldn't create log file, ignore
}
}

// Display message in Pro/Engineer
//
public void DisplayMessage ( String mesg ) throws Exception {
stringseq seq = stringseq.create();
seq.set(0, mesg);
session.UIDisplayMessage(msgFile, "JLHW %s", seq);
seq.clear();
writeLog(mesg);
}

// Write text to log file
//
public void writeLog ( String mesg ) {
try {
if (log == null) { return; }
log.write(mesg + newline);
log.flush();
}
catch (Exception e) {
// ignore
}
}

// Close log file
//
public void closeLog () {
try {
if (log == null) { return; }
log.close();
}
catch (Exception e) {
// ignore
}
}

// Called by Pro/Engineer when starting the application
//
public static void startApp () {
try {
App = new jlinkhelloworld();
App.startupApplication();
}
catch (Exception e) {
App.writeLog("Problem running startupApplication method" + e.toString());
return;
}
}

// Called by Pro/Engineer when stopping the application
//
public static void stopApp () {
try {
App.shutdownApplication();
}
catch (Exception e) {
App.writeLog("Problem running shutdownApplication method" + e.toString());
return;
}
}

// Perform some steps when shutting down the application
//
public void shutdownApplication () throws Exception {
writeLog("Application '" + programName + "' stopped");
closeLog();
}

// Perform some steps when starting the application
//
public void startupApplication () throws Exception {

try {
writeLog("Application '" + programName + "' started.");
session = pfcGlobal.GetProESession();
}
catch (jxthrowable x) {
writeLog("ERROR: Problem getting session object.");
return;
}

UICommand btn1_cmd = null;

try {
// Define a UI command
String iconFile = session.GetMessageContents(
msgFile, "JLHW Btn1 icon", null);
btn1_cmd = session.UICreateCommand(
"JLHW Btn1 Cmd", new JLHW_Btn1_CmdListener()
);
btn1_cmd.SetIcon(iconFile);
btn1_cmd.Designate(msgFile,"JLHW Btn1 Label",null,null);
}
catch (jxthrowable x) {
writeLog("ERROR: Problem creating uicmd.");
return;
}
/* Tools menusunu aktive ediyor.
try {
// Add UI command to 'Tools' menu
session.UIAddButton(
btn1_cmd, "Utilities", null,
"JLHW Btn1 Label", "JLHW Btn1 Help",
"msg_jlinkhelloworld.txt"
);
}
catch (jxthrowable x) {
writeLog("ERROR: Problem creating menu: " + x.toString());
return;
}
*/
DisplayMessage(programName + " application started.");

}

// Callback for the 'Tools' menu button
//
public void Btn1_callback ( ) throws Exception {

String mesg = null;
Model model = session.GetCurrentModel();

if (model == null) {
mesg = "Hello! Goekhan SCHAMAN";
}
else {
mesg = "Hello! The model is: " + model.GetFileName();
}

DisplayMessage(mesg);

}

// Inner class for UI Command Listener
//
public class JLHW_Btn1_CmdListener extends DefaultUICommandActionListener {

// Handler for button push
//
public void OnCommand () {
try {
Btn1_callback();
}
catch (Exception e) {
writeLog("Exception thrown by Btn1_callback method: " + e.toString());
}
}

}
}

İlk kodlamada constructor yaratıyoruz. Kodu incelerseniz göreceksinizki log kaydı tutan bir txt file yaratıyor. Önemli bir detay değildir.



public jlinkhelloworld () {
programName = this.getClass().getName();
try {
log = new FileWriter(programName + ".log");
newline = System.getProperty("line.separator");
}
catch (Exception e) {
// couldn't create log file, ignore
}
}


“protk.dat” dosyasında hatırlarsanız. Start metodunu belirtmemiz gerekiyordu “java_app_start”. İşte bu metodun ismini “protk.dat dosyasının içine yazmamız gerekiyor. Böylece Creo kendisi ile ilgili kodun nerede başladığını biliyor. Kodu incelerseniz göreceksiniz ki, consructor metodundan yeni bir nesne yaratılıp yeni bir metoda yönlendiriliyor.



// Called by Pro/Engineer when starting the application
//
public static void startApp () {
try {
App = new jlinkhelloworld();
App.startupApplication();
}
catch (Exception e) {
App.writeLog("Problem running startupApplication method" + e.toString());
return;
}
}


Bu kısmı incelerseniz göreceksinizki mevcut Creo da açılan session’un ve butonun yaratılması sağlanıyor.



public void startupApplication () throws Exception {

try {
writeLog("Application '" + programName + "' started.");
session = pfcGlobal.GetProESession();
}
catch (jxthrowable x) {
writeLog("ERROR: Problem getting session object.");
return;
}

UICommand btn1_cmd = null;

try {
// Define a UI command
String iconFile = session.GetMessageContents(
msgFile, "JLHW Btn1 icon", null);
btn1_cmd = session.UICreateCommand(
"JLHW Btn1 Cmd", new JLHW_Btn1_CmdListener()
);
btn1_cmd.SetIcon(iconFile);
btn1_cmd.Designate(msgFile,"JLHW Btn1 Label",null,null);
}
catch (jxthrowable x) {
writeLog("ERROR: Problem creating uicmd.");
return;
}
/* Tools menusunu aktive ediyor.
try {
// Add UI command to 'Tools' menu
session.UIAddButton(
btn1_cmd, "Utilities", null,
"JLHW Btn1 Label", "JLHW Btn1 Help",
"msg_jlinkhelloworld.txt"
);
}
catch (jxthrowable x) {
writeLog("ERROR: Problem creating menu: " + x.toString());
return;
}
*/
DisplayMessage(programName + " application started.");

}


Butona basıldığında  çalışacak asıl kısım burası aslında diğer tüm yerleri şablon olarak kullanıp yazacağınız programda sadece buraya eklemeler yaparak yeni programlar geliştirebilirsiniz.



public void Btn1_callback ( ) throws Exception {

String mesg = null;
Model model = session.GetCurrentModel();

if (model == null) {
mesg = "Hello! Goekhan SCHAMAN";
}
else {
mesg = "Hello! The model is: " + model.GetFileName();
}

DisplayMessage(mesg);

}


“protk.dat” isimli dosyanın içeriği aşağıdaki gibidir.



name jlinkhelloworldapp
startup java
java_app_class jlinkhelloworld
java_app_start startApp
java_app_stop stopApp
allow_stop true
delay_start false
text_dir C:/apps/JLinkHelloWorld/text
java_app_classpath C:/apps/JLinkHelloWorld
end


notepad++ programı yardımıyla java kodunu hem çalıştırmak hemde derlemek için F6 tuşuna basın (tabiki bununla ilgili notepad++ programının kurulması ve çalıştırılması ile ilgili yazıma buradan ulaşabilirsiniz) ve çıkan ekrana aşağıdaki MS-DOS komutlarını yapıştırın.

capture

eğer bir önceki registry file oluşturulması ile ilgili yazımda bahsedilen, dosyaları c:\apps klasörüne kopyalayıp ve dosyaların  isimlerini değiştirmediyseniz bu ekranda herhangi bir şey değiştirmenize gerek yoktur. Aşağıda yolunu kontrol etminiz gerekenleri yazacağım, eğer belirttiğim yollar sizin bilgisayarınızınkinden farklı ise lütfen düzeltin. Java versiyonu farklı olabileceğinden javanın yüklediği yeri kesinlikle kontrol edin ve yolları 8 harf kuralına göre yazmanız gerekecektir.

Kontrol etmeniz gerekenler;

  • javanın Program files’daki yeri
  • Creo’nun Common Files klasörün yeri


CD\
set CLASSPATH=C:\Progra~1\PTC\Creo 3.0\F000\Common~1\text\java\otk.jar
set CREO_HOME=C:\Progra~1\PTC\Creo 3.0\F000\Common~1
cd $(CREO_HOME)\text\java\
set JAVA_HOME=C:\Progra~1\Java\jdk1.8.0_92
$(JAVA_HOME)\bin\javac -cp otk.jar;pfcasync.jar c:\apps\JLinkHelloWorld\jlinkhelloworld.java
cd c:\apps\JLinkHelloWorld\
$(JAVA_HOME)\bin\jar cvf0 jlinkhelloworld.jar jlinkhelloworld.class
$(CREO_HOME)\..\Parametric\bin\parametric.bat


En sondaki MS-DOS komutu Creo’nun Parametric versiyonunu çalıştıracaktır. ve yazdığınız config.pro ve protk.dat dosyalarını okuyarak ek yazılımı otomatik olarak başlatacaktır.

3

yazdığınız yazılımın simgesi ve verdiğiniz isim Creo’nun üst menüsünde görünecektir. simgeyi tıkladığınızda ise4

istediğiniz bilgi, bilgi ekranında gözükecektir. Anlaşılmamış yerler olabilir, bana ulaşırsanız tekrar bilgi vermeye çalışırım.

İyi çalışmalar

Gökhan ŞAMAN

http://www.gokhansaman.com/wp-content/plugins/sociofluid/images/google_48.png http://www.gokhansaman.com/wp-content/plugins/sociofluid/images/myspace_48.png http://www.gokhansaman.com/wp-content/plugins/sociofluid/images/facebook_48.png http://www.gokhansaman.com/wp-content/plugins/sociofluid/images/yahoobuzz_48.png http://www.gokhansaman.com/wp-content/plugins/sociofluid/images/twitter_48.png