| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Creo |
Autor
|
Thema: Typ vom geöffnetet File ermitteln (1511 mal gelesen)
|
magic_halli Mitglied
Beiträge: 361 Registriert: 03.07.2006 WF2 M210 / WF3 M110 Linux Fedora C4 WinXP Pro Java 1.6.0_06
|
erstellt am: 01. Aug. 2006 09:24 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich bin grad dabei, mit Jlink den Typ (ASSEMBLY, PART usw.) des gerade geöffnetet Files auszulesen. Hierfür habe ich die Funktion pfcModel.Model.GetType() in der Doku gefunden:
Code:
Model model = curSession.GetCurrentModel(); ModelType modeltype = model.GetType(); //Testanzeige zum vergleichen JOptionPane.showMessageDialog(null, modeltype.toString());
Ich wollte mir diesen nurmal testhalber anzeigen lassen, um zu sehen was zurückgeliefert wird. Jetzt erscheinen aber nur irgendwelche Zeichen (z.B.:"b2002f" bei *.asm, "bb0d0d" bei *.prt). Ich würde aber gern sowas wie ASSEMBLY oder PART geliefert bekommen.Ist das überhaupt die richtige Funktion, um den Typ auszulesen oder muss ich da was anderes nehmen? Danke, Rico. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bilch Mitglied
Beiträge: 78 Registriert: 01.02.2005
|
erstellt am: 01. Aug. 2006 10:03 <-- editieren / zitieren --> Unities abgeben: Nur für magic_halli
Hallo, if (model.GetType() == modeltype.MDL_DRAWING) { // also eine Drawing! } Schau dir lieber mal die API unter "Class ModelType" an. Gruss. "cause its part of a complex program." Fang mal lieber klein an. ------------------ "Ich will keine neuen Kommunikationsmittel. Ich will neue Technologien, mit denen ich die Leute davon abhalten kann, mit mir zu kommunizieren." Dilbert. [Diese Nachricht wurde von bilch am 01. Aug. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GüntherP Mitglied CAD Administrator / Konstrukteur
Beiträge: 82 Registriert: 18.02.2005 HP xw4100 NVIDIA Quadro 980XGL<P>Wildfire 2.0 / 3.0 Intralink 3.4 F000 PDMLink 8.0 M030
|
erstellt am: 01. Aug. 2006 10:13 <-- editieren / zitieren --> Unities abgeben: Nur für magic_halli
Hallo, die Werte des Typs ModelType sind nur int. Ich würde, wenn ich wirklich den Text asm oder prt brauche, das ganze über eine Hilfsvariable lösen. Code:
Model model = curSession.GetCurrentModel(); ModelType modeltype = model.GetType(); String stringtype = "unkown"; if (modeltype == ModelType.MDL_ASSEMBLY) stringtype = "asm"; else if (modeltype == ModelType.MDL_PART) stringtype = "prt"; JOptionPane.showMessageDialog(null, stringtype);
Die Anwendung von so etwas ist mir aber nicht ganz klar. Gruß, Günther Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
U_Suess Moderator CAD-Admin / manchmal Konstrukteur
Beiträge: 10560 Registriert: 14.11.2001 CREO 4 M120 (+Geniustool für Creo 6.0.2) PDMLink 11.0 M030 NTSI Contender E64 SC8 mit NVIDIA Quadro P4000 Intel Core i7-10700KF / 3,80 GHz 64GB DDR4-RAM / 2933 MHz Win 10 Prof. 64Bit (20H2)
|
erstellt am: 01. Aug. 2006 10:22 <-- editieren / zitieren --> Unities abgeben: Nur für magic_halli
|
magic_halli Mitglied
Beiträge: 361 Registriert: 03.07.2006 WF2 M210 / WF3 M110 Linux Fedora C4 WinXP Pro Java 1.6.0_06
|
erstellt am: 01. Aug. 2006 10:45 <-- editieren / zitieren --> Unities abgeben:
Jawohl, die Sache klappt nun mit dem auslesen. Vielen Dank! Zur Erklärung für Euch: Ich muss hier für die Konstrukteure, die täglich ProE benutzen, verschiedene Sachen programmieren, um diverse Aufgaben zu automatisieren bzw zu erleichtern. Dazu reichen leider nicht nur Mapkeys aus, sondern diese Wünsche kann man nur in Verbindung mir Jlink bzw. Java realisieren. Ich persönlich bin erst seit kurzem hier und habe auch erst hier überhaupt etwas von ProE und JLink gehört bzw. gesehen Ich werde hier wahrscheinlich auch nicht in den "Genuß" kommen, in ProE etwas zu konstruieren , sondern werd mich vorerst nur um solche Arbeitserleichterungen für die anderen kümmern müssen! Das hier ist auch so ziemlich das einzige Forum, in dem ich Rat und Hilfe bekomme - von, wie ich den Eindruck habe - hochqualifizierten ProE- und Jlink-Experten ...dafür ist Euch mein ewiger Dank gewiss und SORRY, wenn ich manchmal mit meinen post´s nerven sollte, aber ich MUSS das tun!!! Gruß Rico. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GüntherP Mitglied CAD Administrator / Konstrukteur
Beiträge: 82 Registriert: 18.02.2005 HP xw4100 NVIDIA Quadro 980XGL<P>Wildfire 2.0 / 3.0 Intralink 3.4 F000 PDMLink 8.0 M030
|
erstellt am: 01. Aug. 2006 12:48 <-- editieren / zitieren --> Unities abgeben: Nur für magic_halli
|
magic_halli Mitglied
Beiträge: 361 Registriert: 03.07.2006 WF2 M210 / WF3 M110 Linux Fedora C4 WinXP Pro Java 1.6.0_06
|
erstellt am: 01. Aug. 2006 13:30 <-- editieren / zitieren --> Unities abgeben:
@Günther ...gut zu wissen, dass es schon Füchse in Jlink gibt Irgendwann kann ich hoffentlich auch mal auf post´s antworten, statt immer nur welche zu eröffnen !!! @all Wo ich einmal dabei bin... hier noch eine Frage: Es gibt die Funktion pfcSession.BaseSession.RunMacro, mit welcher man Mapkeys quasi in Jlink definieren und ausführen kann (Jlink Doku 6-6). Nun hab ich mir nen vorhandenen Mapkey zur PDF-Erstellung hergenommen (dieser funktioniert auch) und hab das analog nach der Doku in Jlink implementiert. Allerdings, wie sollte es anders sein, geht das erstmal wieder nicht wie gedacht-es passiert gar nichts! Vorgehen: 1. *.drw öffnen 2. Code ausführen 3. pdf sollte erzeugt werden - eigentlich!
Code:
try{ String macrostring ="~ Activate `main_dlg_cur` `ProCmdViewRegenCur.dwg`;"+ "~ Activate `main_dlg_cur` `ProCmdViewRefit.view`;"+ "~ Activate `main_dlg_cur` `ProCmdModelPrint.file`;"+ "~ Select `print` `CascadeButton1`;~ Close `print` `CascadeButton1`;"+ "~ Activate `print` `.pdf_print`;~ Activate `print` `OK`;"+ "~ Activate `Print_file` `OK`;"; curSession.RunMacro(macrostring); }
Hat das auch zufällig schonmal jemand gemacht? Kann doch nur wieder irgendein syntaktisches Problem sein?! Gruß Rico. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
magic_halli Mitglied
Beiträge: 361 Registriert: 03.07.2006 WF2 M210 / WF3 M110 Linux Fedora C4 WinXP Pro Java 1.6.0_06
|
erstellt am: 01. Aug. 2006 14:09 <-- editieren / zitieren --> Unities abgeben:
Mir ist grade noch was aufgefallen: Wenn ich eine *.prt öffne und das Macro ausführe, startet der Mapkey und bricht dann ab, wegen eines Fehlers - da kein pdf von einer *.prt erzeugt werden kann!!! Auch hab ich die Typ-Ermittlung der geöffnetet Datei mal mit dazu genommen (siehe oben) und bekomme hier auch keine Message angezeigt Code:
... else if (modeltype == ModelType.MDL_DRAWING) stringtype = "DRAWING";JOptionPane.showMessageDialog(null, stringtype);
Scheint wohl etwas grundlegendes in Bezug auf *.drw zu sein?! Werden drw´s anders angesprochen bzw. behandelt als prt´s und asm´s? [Diese Nachricht wurde von magic_halli am 01. Aug. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GüntherP Mitglied CAD Administrator / Konstrukteur
Beiträge: 82 Registriert: 18.02.2005 HP xw4100 NVIDIA Quadro 980XGL<P>Wildfire 2.0 / 3.0 Intralink 3.4 F000 PDMLink 8.0 M030
|
erstellt am: 01. Aug. 2006 16:26 <-- editieren / zitieren --> Unities abgeben: Nur für magic_halli
Hallo Rico, für so einen Ablauf würde ich etwas anders vorgehen. Code:
String macro = xxx; if (model.GetType() == ModelType.MDL_DRAWING) { curSession.RunMacro(macro); }
Das spart einigen Code (xxx muss natürlich ersetzt werden ). Bei deinem Macro würde ich prüfen, ob eventuell existierende PDF's überschrieben werden können. Ich habe die Funktion bisher noch nicht verwendet. Man könnte das ganze aber mit einem einfacheren Mapkey ausprobieren (z.B Teil im Anzeigebereich einpassen). Erzeugtst du die PDF's mit einem Freeware PDF Drucker? Wenn ja hast du möglicherweise das Problem, dass du das Druckerfenster bekommst und es nicht mit JLink steuern kannst. Solltest du die Möglichkeit haben Postscript Dateien in PDF's zu konvertieren, kannst du direkt PS mit Hilfe von JLink exportieren. Gruß, Günther
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
anagl Ehrenmitglied V.I.P. h.c.
Beiträge: 4566 Registriert: 28.05.2001 CREO2 M140 PDMLink 10.2 M020 HW diverse Das Schreiben bei CAD.de ist freiwillig und kein Muss !!!!!
|
erstellt am: 01. Aug. 2006 16:32 <-- editieren / zitieren --> Unities abgeben: Nur für magic_halli
Zwei Hinweise 1. Run Macro läuft erst bei Rückkehr zu Pro/E und nicht sofort 2. Beim Export via ILINK in eine Druckerdatei (z.B Postscript) fehlt die Möglichkeit eine Stifte-Datei anzusprechen ------------------ Servus Alois Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GüntherP Mitglied CAD Administrator / Konstrukteur
Beiträge: 82 Registriert: 18.02.2005 HP xw4100 NVIDIA Quadro 980XGL<P>Wildfire 2.0 / 3.0 Intralink 3.4 F000 PDMLink 8.0 M030
|
erstellt am: 02. Aug. 2006 07:25 <-- editieren / zitieren --> Unities abgeben: Nur für magic_halli
|
magic_halli Mitglied
Beiträge: 361 Registriert: 03.07.2006 WF2 M210 / WF3 M110 Linux Fedora C4 WinXP Pro Java 1.6.0_06
|
erstellt am: 02. Aug. 2006 08:29 <-- editieren / zitieren --> Unities abgeben:
Hi, erstmal noch was grundlegendes vornweg. Wenn ich den Typ einer asm oder prt auslese (wie oben von GüntherP beschrieben) erhalte ich als Ausgabe "asm" bzw. "prt". Das selbe noch für drw hinzugefügt, erhalte ich keinerlei Ausgabe in Form von "drw"!!!
Code:
... else if (modeltype == ModelType.MDL_DRAWING) stringtype = "drw"; JOptionPane.showMessageDialog(null, stringtype); ...
...daher greift natürlich auch der Code für den Mapkey nicht (soll nur bei "drw" greifen), weil mir ja gar kein Typ bei einer geöffneten drw ermittelt wird!!! Wie kann das sein - das versteh ich echt nicht?!?!? @GüntherP Es läuft hier irgendein Ghostscript Teil (ps2pdf), welches aus einer drw erst eine *.ps und gleich im Anschluss aus dieser eine *.pdf erzeugt. In ProE hab ich nen Mapkey definiert, der genau diese spezielle pcf-Datei anspricht, die das alles regelt und wo auch das "plotter_command ps2pdf" lautet. Soweit läuft das Teil ohne Probleme.
@anagl Zitat: 1. Run Macro läuft erst bei Rückkehr zu Pro/E und nicht sofort
Wie meinst Du das? RunMacro wird von mir in ProE erst ausgeführt, nachdem ich eine drw geöffnet habe und einen Button drücke, hinter dem sich diese Programm-Funktionalität verbirgt. Gruß Rico.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bilch Mitglied
Beiträge: 78 Registriert: 01.02.2005
|
erstellt am: 02. Aug. 2006 08:55 <-- editieren / zitieren --> Unities abgeben: Nur für magic_halli
Zitat: 1. Run Macro läuft erst bei Rückkehr zu Pro/E und nicht sofort
Zitat:
Wie meinst Du das? RunMacro wird von mir in ProE erst ausgeführt, nachdem ich eine drw geöffnet habe und einen Button drücke, hinter dem sich diese Programm-Funktionalität verbirgt. Gruß Rico.[/i]
Hallo, wieder mal aus der API!
Macros may only run when control is returned to Pro/ENGINEER. If control is maintained by a J-Link program, the macro will be stored for later running. Gruss.
------------------ "Ich will keine neuen Kommunikationsmittel. Ich will neue Technologien, mit denen ich die Leute davon abhalten kann, mit mir zu kommunizieren." Dilbert. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
anagl Ehrenmitglied V.I.P. h.c.
Beiträge: 4566 Registriert: 28.05.2001 CREO2 M140 PDMLink 10.2 M020 HW diverse Das Schreiben bei CAD.de ist freiwillig und kein Muss !!!!!
|
erstellt am: 02. Aug. 2006 09:10 <-- editieren / zitieren --> Unities abgeben: Nur für magic_halli
Zitat: Original erstellt von GüntherP: Man kann aber eine pfc Datei für den Export verwenden, in der man die pnt Datei angibt
In WF2 geht das nach unseren Tests nicht, auch bestätigt vom Support. Kennst Du einen anderen Weg? IT is not possible to use pcf files with J-Link, model.Export(filename, PlotInstructions) does allow to use in Pro/ENGINEER predefined printer (plotter) only. Refered to task based libraries. (Pro/TOOLKIT has the needed functionality)@RICO aus der Doku Macros are executed from synchronous mode only when control returns to Pro/ENGINEER from the J-Link program. Macros in synchronous mode are stored in reverse order (last in, first out). ------------------ Servus Alois Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GüntherP Mitglied CAD Administrator / Konstrukteur
Beiträge: 82 Registriert: 18.02.2005 HP xw4100 NVIDIA Quadro 980XGL<P>Wildfire 2.0 / 3.0 Intralink 3.4 F000 PDMLink 8.0 M030
|
erstellt am: 02. Aug. 2006 10:44 <-- editieren / zitieren --> Unities abgeben: Nur für magic_halli
@magic_halli Das mit dem ModelType muss funktionieren. Woher bekommst du dein Modell? Ist dein ermitteltes Modell == null? Gibt es überhaupt keine Ausgabe oder bekommst du unkown ausgegeben? Hier ist die Methode mit der ich arbeite. Der Drucker POSTSCRIPT ist in einer PFC Datei definiert. Es Gibt nur ein kleines Problem mit Ausgaben von A4 hochformat Zeichnungen, dass von PTC gerade bearbeitet wird. Das könnte aber mit einer anderen PFC Datei besser funktionieren, hab's aber bis jetzt noch nicht getestet. Code:
public void exportPS (Drawing curDrawing) { try { SheetData info = curDrawing.GetSheetData (1); // POSTSCRIPT == Name des Druckers PlotInstructions pi = (PlotInstructions)pfcModel.PlotInstructions_Create("POSTSCRIPT"); if (pi != null) { pi.SetPlotterName("POSTSCRIPT"); pi.SetOutputQuality(3); pi.SetUserScale(1.0); pi.SetPageRangeChoice(PlotPageRange.PLOT_RANGE_CURRENT); curDrawing.Export(curModel.GetFullName() + ".ps", pi); } } catch (Exception err) { } }
Gruß, Günther
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
magic_halli Mitglied
Beiträge: 361 Registriert: 03.07.2006 WF2 M210 / WF3 M110 Linux Fedora C4 WinXP Pro Java 1.6.0_06
|
erstellt am: 02. Aug. 2006 11:38 <-- editieren / zitieren --> Unities abgeben:
Hmmm, sobald ich irgendwas auf eine drw bezogen machen will, kommt keinerlei Ausgabe - weder UNKNOWN, noch Fehler, noch sonstwas. Mein Model bekomme ich so:
Code:
Session curSession = pfcGlobal.GetProESession(); Model model = curSession.GetCurrentModel();String type = "UNKNOWN"; ModelType modeltype = model.GetType(); if (modeltype == ModelType.MDL_DRAWING){ type = "drw"; } JOptionPane.showMessageDialog(null, type);
Es geht bei der Ausführung nicht einmal der MessageDialog auf! Wobei, wenn es sich um asm´s oder prt´s handelt, dann funktioniert alles wie gehabt. [Diese Nachricht wurde von magic_halli am 02. Aug. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mholz Mitglied CAx Admin
Beiträge: 198 Registriert: 27.10.2000
|
erstellt am: 02. Aug. 2006 17:09 <-- editieren / zitieren --> Unities abgeben: Nur für magic_halli
Hallo, ich kopiere Dir mal den Code wie ich Ihn verwende rein. Code: Model model = null; Drawing drawing = null;//SOME CODE model = proeSession.GetCurrentWindow().GetModel(); if (model.GetType() == ModelType.MDL_DRAWING) { // CODE } else { Helper.displayWarning("The loaded Model " + model.GetFileName().toString() + " is not a drawing! I do nothing ;-))"); logger.write("WARNING: The loaded Model " + model.GetFileName().toString() + " is not a drawing! I do nothing ;-))"); }
Wobei Helper.displayWarning eine Function aus einer meiner Standard Klassen ist um im Mitteilungsfenster eine Warnung einzublenden und Logger ist meine Standard Klasse zum erstellen von Logfiles. ------------------ Gruß Michael [Diese Nachricht wurde von mholz am 02. Aug. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
magic_halli Mitglied
Beiträge: 361 Registriert: 03.07.2006 WF2 M210 / WF3 M110 Linux Fedora C4 WinXP Pro Java 1.6.0_06
|
erstellt am: 04. Aug. 2006 08:12 <-- editieren / zitieren --> Unities abgeben:
...ob´s am Wetter liegt??? Jetzt geht mein Macro-Teil!!! Ich habe letztendlich gar keinen Macro-String an RunMacro() übergeben müssen, sondern lediglich den Mapkey-Name (aus config.pro)!!! Obwohl das in der Doku hier anders beschrieben ist - sauerrei! Hier aber auch noch ne Frage hinterher: Ich lasse mir mit dem Macro bzw. Mapkey von einer geöffneten drw erst ne *.ps und daraus ein *.pdf erzeugen - mit dem gleichen Namen wie die drw. Jetzt soll der Name aber ein anderer sein, als der vorgegebene. Den neuen Name lasse ich mir nämlich erzeugen und der setzt sich zusammen aus "Sachnummer__Dateiname" (vom übergeordneten prt). Lange Rede, kurzer Sinn... ich will irgendwie nen anderen Namen, als den vorgeschlagenen benutzen - hab aber keinen Plan, wie ich da erstmal rangehen sollte [Diese Nachricht wurde von magic_halli am 04. Aug. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
COMPUTERSPACE Mitglied Sysadmin und Anwender
Beiträge: 1149 Registriert: 06.01.2005 Dell M90, T2400, 4Gb, FX 2500M, W7 32bit, WF5/M65/Produktiv MS Server 2008 64bit + INTRALINK 9.1 M040
|
erstellt am: 04. Aug. 2006 08:38 <-- editieren / zitieren --> Unities abgeben: Nur für magic_halli
Hallo, kannst du bitte, wenn definitiv eine neue Frage ansteht ein neues posting aufmachen. Ich verliere sonst den Überblick und wenn ich was suche, finde ich es ja auch nicht. Dem einen oder anderen hier im Forum mag es ähnlich gehen mit endlosthreads. [Diese Nachricht wurde von COMPUTERSPACE am 04. Aug. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
magic_halli Mitglied
Beiträge: 361 Registriert: 03.07.2006 WF2 M210 / WF3 M110 Linux Fedora C4 WinXP Pro Java 1.6.0_06
|
erstellt am: 04. Aug. 2006 08:50 <-- editieren / zitieren --> Unities abgeben:
|
GüntherP Mitglied CAD Administrator / Konstrukteur
Beiträge: 82 Registriert: 18.02.2005 HP xw4100 NVIDIA Quadro 980XGL<P>Wildfire 2.0 / 3.0 Intralink 3.4 F000 PDMLink 8.0 M030
|
erstellt am: 04. Aug. 2006 09:12 <-- editieren / zitieren --> Unities abgeben: Nur für magic_halli
|