| | |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für PTC CREO |
| | |
 | BOM Assistant für Stücklistenerstellung , eine App
|
|
Autor
|
Thema: Parameter auslesen und anzeigen (1497 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: 03. Aug. 2006 13:40 <-- editieren / zitieren --> Unities abgeben:         
Hi, ich bin dabei, aus einer *.prt bestimmte Parameter bzw. deren Wert auszulesen und anzuzeigen. Solange es sich um String Parameter handelt - alles kein Thema. Doch Parameter, die als reelle Zahl (double?) angelegt wurden, krieg ich bald ne Macke, wenn´s ums anzeigen geht... Code:
String dateiname; Parameter sachnr = model.GetParam("Sachnummer"); ParamValue sachnr_value = sachnr.GetValue(); dateiname = sachnr_value.GetStringValue(); JOptionPane.showMessageDialog(null, dateiname);
Hier bekomme ich wunderbar den Parameter Sachnummer (ist als String-Parameter angelegt) angezeigt.Doch das gleich bei Parametern, die als reelle Zahl angelegt sind, bekomme ich immer eine Exception:"XBadGetParamValue". Klar, ne Zahl is ja auch kein String. Doch irgendwie geht auch keine Typumwandlung mit .toString()!!! Keine Ahnung warum...
Code:
... Parameter menge = model.GetParam("Menge"); ParamValue menge_value = menge.GetValue(); dateiname = menge_value.GetIntValue().toString(); //...oder aber auch schon so versucht: dateiname = menge_value.GetDoubleValue().toString(); JOptionPane.showMessageDialog(null, dateiname);
Hintergrund ist der, das ein neuer Dateiname generiert werden soll, in Form von: "Sachnummer_Menge_Blechdicke_Werkstoff.*" Wie kann ich mir aber nun "Nicht-String"-Werte wenigstens erstmal anzeigen lassen? Wisst Ihr wie ich meine? Vielen Dank, Rico.
[Diese Nachricht wurde von magic_halli am 03. Aug. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fussel Mitglied

 Beiträge: 39 Registriert: 08.02.2002 Pro|E Wildfire2.0 (Student) Windows 2000 SP4 AMD Athlon XP 2600+ ATI FireGL 8800 1024 MB RAM
|
erstellt am: 03. Aug. 2006 15:19 <-- editieren / zitieren --> Unities abgeben:          Nur für magic_halli
Hallo Rico, ich habe gerade meine IDE nicht laufen (zum nachvollziehen), aber ich wuerde mal mit den Funktionen von ParamValueType nachsehen, was da tatsaechlich fuer Typen im Spiel sind. Martin 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: 03. Aug. 2006 15:46 <-- editieren / zitieren --> Unities abgeben:          Nur für magic_halli
Hallo, wenn du mit dateiname = menge_value.GetDoubleValue(); arbeitest, bekommst du einen double wert zurück und kein Double Object. Daher kannst du auch keine toString() Methode anwenden. Hier sind 2 Vorschläge um einen String zu erzeugen: 1. dateiname = "" + menge_value.GetDoubleValue(); 2. Double value = new Double(menge_value.GetDoubleValue()); dateiname = value.toString();
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: 04. Aug. 2006 07:29 <-- editieren / zitieren --> Unities abgeben:         
Wunderbar... ich habe mich für Variante 2 entschieden und es klappt - ich bekomme von einer geöffneten prt alles in der Form ausgelesen, wie ich mir das gedacht habe So sieht nun letztendlich mein Code hierfür aus:
Code:
dateinameDXF = sachnr_value.GetStringValue() +"__"+ (new Double(menge_value.GetDoubleValue())).toString() +"__"+ (new Double(blechd_value.GetDoubleValue())).toString() +"__"+ werkst_value.GetStringValue(); JOptionPane.showMessageDialog(null, dateinameDXF);
Noch ne Frage hierzu: (wieso ich´s auch nie bei einem bewenden lassen kann ?! ) Wenn ich auf eine geöffnete prt das oben anwende, erhalte ich im MessageFenster den zusammengesetzten String als Ausgabe. Das funktioniert aber nicht bei alles prt´s in meinem Ordner, obwohl bei allen diese Parameter auch gesetzt und nicht leer sind. Das kann doch nicht dateiabhängig sein??? 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: 04. Aug. 2006 09:06 <-- editieren / zitieren --> Unities abgeben:          Nur für magic_halli
Hallo, ich kann mir nur vorstellen, dass es eetwas mit dem Parameterauslesen zu tun hat. Wenn du ein größeres Projekt machen möchtest, würde ich sehr viel mit Ausgaben in eine eigene log Datei arbeiten. Damit wird es leichter Exceptions herauszufinden. Für dein Problem könntest du eine try-catch Block um den Code setzten und im Fall einer Exception den Fehler in eine Datei schreiben. Ein mögliches Problem währe auch, wenn der Parametertyp nicht der ist, den du auslesen möchtest (wenn blech_value kein Double Parameter sondern ein String ist). Das kann man aber über den ParameterTyp abfragen. 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: 04. Aug. 2006 09:24 <-- editieren / zitieren --> Unities abgeben:         
Mh, ich werd mich wohl erstmal schlau machen, wie ich in ein Logfile schreibe.  Mal sehen, was da dann drin steht. Obwohl ich aber eigentlich keinerlei Fehlermeldung erhalte - es passiert einfach nichts. Die Parameter sind in allen Dateien vom gleichen Typ - habs überprüft - und haben auch alle einen Value... [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 09:51 <-- editieren / zitieren --> Unities abgeben:          Nur für magic_halli
Hallo Magic_Halli, einmal eine einfache Frage, um deine Fragen besser einordnen zu könnnen. Gehörst du zur Generation Praktikum oder was treibt dich um Dinge zu tun, deren Grundlagen dir gänzlich unbekannt sind. Und vielleicht könntest, du zur Feier des Tages auch mal die SysInfo ausfüllen. 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 10:02 <-- editieren / zitieren --> Unities abgeben:         
@COMPUTERSPACE Ja, Generation Praktikum triffts genau! Hab bis vor 4 Wochen noch nie was von ProE und Jlink gehört -aber mittlerweile auch schon viel dazu gelernt. So... und Sysinfo is auch ausgefüllt. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
U_Suess Moderator CAD-Admin / manchmal Konstrukteur
       

 Beiträge: 10679 Registriert: 14.11.2001 CREO 8.0.6.0 (+Geniustool für Creo 10.0.1) PDMLink 12.0.2.8 NTSI Contender E64 SC8 mit NVIDIA Quadro P4000 Intel Core i7-10700KF / 3,80 GHz 64GB DDR4-RAM / 2933 MHz Win 10 Prof. 64Bit
|
erstellt am: 04. Aug. 2006 10:07 <-- editieren / zitieren --> Unities abgeben:          Nur für magic_halli
Zitat: Original erstellt von magic_halli: So... und Sysinfo is auch ausgefüllt.
Geht doch, auch wenn es schon einige angemahnt haben. ------------------ Gruß Udo Keine Panik, Du arbeitest mit Pro/E! Und Du hast cad.de gefunden! 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 12:06 <-- editieren / zitieren --> Unities abgeben:         
So, Error´s in File loggen funktioniert nun. Habe das wie folgt gelöst: 1. Funkion log(String message), welche Errormessage übergeben bekommt und diese dann in ein File schreibt 2. in den catch-Klauseln diese Funktion aufrufen Code zu 1.:
Code:
public void log(String message) { try { FileWriter fw = new FileWriter("/<dir>/errorlog.log", true); fw.write(message + "\n"); fw.close(); } catch ( IOException e ) { System.out.println("Konnte nicht in Datei schreiben."); } }
Code zu 2.:
Code:
try{ //Anweisungen } catch(jxthrowable err) { log(err.toString()); }
Soviel dazu...Doch zum Problem aus MEINEM 2.Post erhalte ich keinerlei Meldungen ausgegeben und wie schon gesagt, bei der ein oder anderen prt klappt die Ausgabe des zusammengesetzten Namen, bei anderen prt nicht (obwohl Parameter+Value vorhanden und immer die entsprechenden Typen haben). Naja, ich bleibe dran 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: 04. Aug. 2006 13:00 <-- 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: 04. Aug. 2006 13:14 <-- editieren / zitieren --> Unities abgeben:         
Sorry, das versteh ich nicht, wie du´s meinst. Ich öffne eine *.prt, gehe auf Tools/Familientabelle, dann geht da ein Fenster auf und dort steht dann:"Modell hat z.Z. keine Familientabellen-Konstruktionsvariationen".
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fussel Mitglied

 Beiträge: 39 Registriert: 08.02.2002 Pro|E Wildfire2.0 (Student) Windows 2000 SP4 AMD Athlon XP 2600+ ATI FireGL 8800 1024 MB RAM
|
erstellt am: 04. Aug. 2006 19:34 <-- editieren / zitieren --> Unities abgeben:          Nur für magic_halli
Hallo Rico, das mit den FamTabs ist eigentlich unkritisch wenn du Operationen auf dem aktiven Teil ausfuehrst. FamTabs werden aber interessant wenn man z.B. mit dem Namen eines FamTabTeils herumspielt. Dann gibt es naemlich den Namen des generischen Teils und des Instanzteils. Ich erwaehne das mal vorsichtshalber, da ich auch mal in so ein Namensproblem geraten bin. Ich vermute, dein Problem haengt am "model" Objekt. Checke doch mal, ob du auch wirklich ein "model" Objekt bekommst und nicht etwa "null". Ich kann in diesem Zusammenhang nur nochmal das Debuggen mit deiner IDE empfehlen. Dann kann man naemlich schoen sehen, ob und wie deine Objekte initialisiert/instanziiert sind. Das ist etwas bequemer als mit nem Logfile voller kryptischer Exceptions. Nimmst du das Model aus einem aktiven Fenster oder aus einem Drawing oder aus einem Assembly oder das aktive Model der Session ...? Es gibt viele Methoden, um an ein Model zu kommen und daher auch viele Fehlerquellen. Uebrigens: schau mal in deine PM, ich wuerde mich mal gerne mit dir von Praktikant zu Praktikant unterhalten. Gruss Martin 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: 07. Aug. 2006 09:36 <-- editieren / zitieren --> Unities abgeben:         
So, die Ausgabe funktioniert nun endlich. Allerdings kann ich nicht sagen warum... Freitag nichts mehr geändert und Rechner ausgeschaltet und heute Rechner eingeschaltet, nochmal getestet und plötzlich gehts?!?!?! Ohne dass ich noch irgendwas geändert habe Das kann ich mir nun echt nicht erklären!!! Als Model nehme ich eigentlich immer das aktive der aktuellen Session:
Code:
Session curSession = pfcGlobal.GetProESession(); Model model = curSession.GetCurrentModel();
Somit kann ich dann als Model ein Assembly, Part oder Drawing haben, je nachdem, was gerade geöffnet ist - ist das so???Haben die Varianten, also: Zitat: ...Model aus einem aktiven Fenster oder aus einem Drawing oder aus einem Assembly oder das aktive Model der Session...
irgendwelche Vor-oder Nachteile, oder ist Model gleich Model, egal wie und woher?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: 07. Aug. 2006 10:26 <-- editieren / zitieren --> Unities abgeben:          Nur für magic_halli
Hallo Rico, Modell ist nicht gleich Modell. Spätestens wenn du aus einer Assembly eine Drawing casten möchtest, wirst du den Unterschied zu spüren bekommen. Ansonsten ist die Modellermittlung über ein Session Object die bessere Methode (alternativ könnte man über das aktuelle Fenster gehen). Gruß, Günther Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |