| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Creo |
Autor
|
Thema: JLink: Selektion analysieren (1012 mal gelesen)
|
philth Mitglied Student
Beiträge: 3 Registriert: 20.04.2009 Wildfire3, Java1.6
|
erstellt am: 25. Apr. 2009 13:42 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich habe folgendes Problem: Mit J-Link lasse ich den Bediener ein "Part" aus meiner Baugruppe auswählen. Wenn sich dieses Teil jetzt in der Hierarchie weit unten befindet, also Teil eines Subassembly ist z.B., möchte ich für den ganzen Weg dorthin die Namen (und Dateinamen) der Elemente des Modellbaums haben. Ich habe dazu den "ComponentPath" zur Verfügung, der mir die ID des jeweiligen Elementes in seinem Oberelement liefert. Wie verwadle ich diese ID nun in ein "Model"? Ich habe hier die Dokumentation zur Verfügung, die bei der ProE-Installation dabei ist, leider finde ich sie überhaupt nicht gelungen. ratlose Grüße, Philipp Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Erich Z Mitglied ProE und Catia System und Anwenderbetreuer
Beiträge: 280 Registriert: 26.10.2000 WF5 M190 - Win7-64
|
erstellt am: 26. Apr. 2009 19:55 <-- editieren / zitieren --> Unities abgeben: Nur für philth
Hallo! ist schon etwas her das ich geJlinkt habe - aber so aus dem Bauch raus würd ich sagen machs umgekehrt und nimm das offene Fenster und gehe da den ganzen Baum durch (so lange bis Du die angeklickte Komponenten gefunden hast) mfg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stahl Mitglied unbeschreiblich
Beiträge: 1475 Registriert: 30.01.2001
|
erstellt am: 27. Apr. 2009 00:06 <-- editieren / zitieren --> Unities abgeben: Nur für philth
Mit GetRoot() bekommt man die Oberbaugruppe, mit GetLeaf() das Modell. Meinst Du das? Achso du willst das Modell einer beliebigen Id dazwischen? Nunja, die Assemblies erben auch ModelItemOwner, also sollte man mit der Methode GetItemById() ein ModelItem mi des Typs Feature kriegen (oder ist es sogar ein eigenes ComponentFeature? - egal). Eine Komponente ist ja ein Feature. Den Modellnamen der Komponente kriegt man dann z.B. mit mi.GetModelDescr().GetFullName() Der Rest sollte dann nicht mehr so schwer sein oder? Der Weg drängt sich mir jedenfalls auf, vielleicht gibts sogar noch einen einfacheren. [Diese Nachricht wurde von Stahl am 27. Apr. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
philth Mitglied Student
Beiträge: 3 Registriert: 20.04.2009 Wildfire3, Java1.6
|
erstellt am: 27. Apr. 2009 06:27 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank für eure Antworten! Stahl: GetRoot() und GetLeaf() hab ich im Griff. Aber je nach Schachtelungstiefe der Baugruppe gibt es ja noch Elemente dazwischen. Ich verstehe das so, dass ich auf diese mit GetComponentPath() und die Elemente dessen zugreife. Die Elemente sind eine Sequenz von Ganzzahlen. Angenommen, die erste ID aus dem ComponentPath ist 3: Jetzt muss ich irgendwie mit GetRoot() arbeiten, mir in diesem Element eben die dritte Komponente geben lassen, und in dieser dann das nächste Element aus dem ComponentPath suchen, zumindest stell ich mir das so vor. Was sind denn die Klassen, die Baugruppen und Bauteile repräsentieren? Ich seh immer nur ModelItem, außerdem muss man bei der Methode ListComponents() (so heißt sie glaub ich) noch einen ModelItemType angeben, welchen sollte ich denn hier nehmen? ModelItemType.ITEM_SOLID_GEOMETRY? Ich paste später hier mal etwas Code, ich muss jetzt aber gleich los. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stahl Mitglied unbeschreiblich
Beiträge: 1475 Registriert: 30.01.2001
|
erstellt am: 27. Apr. 2009 11:46 <-- editieren / zitieren --> Unities abgeben: Nur für philth
Ist dir klar, was eine Komponente ist? Das ist ein Feature, also ein KE der Baugruppe. Wenn Du einen Teil x.prt in der Baugruppe 5 mal verbaust, hast du 5 Komponenten. Aber nur 1 Model. Frage: Was sind denn die Klassen, die Baugruppen und Bauteile repräsentieren? Antwort: com.ptc.pfc.pfcModel.Model Frage: [..]welchen sollte ich denn hier nehmen? ModelItemType.ITEM_SOLID_GEOMETRY? Antwort: ITEM_FEATURE GetItemByID liefert die Komponente. Und wenn du die Komponente hast, kriegst du den Namen des Modells über die zuvor beschriebenen Methoden raus. Und wenn du den Namen hast, kriegst du über session.GetModel() das Modell. Wie gesagt, das ist der Weg den ich ohne selber auszuprobieren klar vor mir sehe, was nicht heißt, dass es der kürzeste ist. ------------------ Stahl. Dies ist keine Signatur. Es gibt hier nichts zu sehen. Bitte lesen Sie weiter. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
philth Mitglied Student
Beiträge: 3 Registriert: 20.04.2009 Wildfire3, Java1.6
|
erstellt am: 27. Apr. 2009 21:57 <-- editieren / zitieren --> Unities abgeben:
Stahl, vielen vielen Dank schonmal! Hab gerade ein Minimalbeispiel ausprobiert, es tut das, was ich mir erhofft habe. Der ComponentFeat hat mir gefehlt, ich hab hier mal ein Stück Code: Model model = s.RetrieveModel(descr); ModelItems items = model.ListItems(ModelItemType.ITEM_FEATURE); for (int i = 0; i < items.getarraysize(); i++){ ModelItem mi = items.get(i); System.out.println(mi); System.out.println(mi.GetName()); try { ComponentFeat f = (ComponentFeat) mi; System.out.println(f.GetModelDescr().GetFullName()); } catch (Exception e) { System.out.println(mi+": Konnte nicht gecastet werden."); } }
... das noch etwas ausbauen, und ich sollte bald einen kompletten Baum parsen können. Vielen Dank! Grüße Philipp Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|