| | |  | 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: Jlink: Komponenten - mehrfaches Vorkommen (291 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: 05. Sep. 2006 12:17 <-- editieren / zitieren --> Unities abgeben:         
Hi, ich ermittle zu einer geöffneten (Haupt-)asm alle enthaltenen Komponenten (asm´s und prt´s). Mit jeder hierin gefundenen asm und prt tue ich dann etwas. Jetzt ist es doch aber so, dass eine asm mehrmals in einer (Haupt-)asm vorkommen kann - genauso wie ein prt, welches mehrfach in einer asm vorkommen kann! Hierfür habe ich erstmal eine Funktion, welche mir pauschal alle enthaltenen Komponenten zu einer geöffneten Baugruppe (asm) ermittelt. Mit jeder ermittelten Komponente wird daraufhin auch gleich etwas gemacht:
Code:
public void searchTree(Session curSession, Model model); ... Assembly asm = (Assembly)model; //auslesen aller ASM´s und PART´s zum jeweiligen ASM (sind sog.Features) Features components = asm.ListFeaturesByType(Boolean.FALSE, FeatureType.FEATTYPE_COMPONENT); //jedes Feature durchlaufen for (int i = 0; i < components.getarraysize(); i++){ //aktuelles Feature = akt. Position in Schleife Feature curFeat = components.get(i); //enthaltene Komponente speichern ComponentFeat curComp = (ComponentFeat)curFeat; //ModelDescriptor zur Komponente erzeugen ModelDescriptor curCompDescr = curComp.GetModelDescr(); //descrModel ist zugehöriges Unter-ASM bzw. -PART Model descrModel = curSession.GetModelFromDescr(curCompDescr); //wenn Model (Part oder Asm) gefunden, dann rekursiver Aufruf if(descrModel != null){ //hier passiert jetzt was mit der gefundenen Komponente //Rekursiver Aufruf meiner Funktion searchTree(curSession, descrModel); } } }
Mein Problem: Ich weiß nicht, wie ich erreichen kann, dass wenn eine Komponente bereits abgearbeitet wurde, sie nicht noch einmal erneut abgearbeitet wird, sobald sie vom Programm in der Baugruppenstruktur an anderer (tiefere) Stelle erneut gefunden wird!!! Hat hierzu jemand eine Idee oder Ansatzpunkt für mich - ich zermarter mir über dieser Stelle schon ewig das Hirn??? Danke, Gruß Rico. PS.: In Worten mal gesagt... Ich will quasi alle enthaltenen Komponenten EINMAL abarbeiten und bei denen die Anzahl größer 1 ist, diese sollen auch nur EINMAL abgearbeitet werden. Bei erneutem auffinden dieser, soll diese quasi ignoriert werden, da sie ja schon bearbeitet wurde. Ui, ui, ui... ziemlich harter Tobak
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: 05. Sep. 2006 13:16 <-- editieren / zitieren --> Unities abgeben:         
Mir is grad noch ne Idee gekommen... Hat nicht jede Komponente eine eindeutige System-ID, mit welcher sie von ProE angesprochen wird? Man könnte ja z.B. diese ID ermitteln (WIE?), dann in eine Liste schreiben und bei einer neuen Komponente die Liste erstmal durchgehen, ob die ID hierin bereits vorhanden ist?! ...wenn nicht, dann Komponente abarbeiten; wenn schon vorhanden, dann nächste Komponente ermitteln. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moskito Mitglied Konstrukteur
 Beiträge: 1 Registriert: 06.09.2006 Pro/E Wildfire 2.0 (M200) Pro/E Wildfire 3.0 (M010) Test
|
erstellt am: 06. Sep. 2006 21:12 <-- editieren / zitieren --> Unities abgeben:          Nur für magic_halli
Ich würd die Komponenten in einem Array speichern und mehrfach vorhandene Komponenten daraus löschen. Danach mit dem "sauberen" Array weiterarbeiten. [Diese Nachricht wurde von moskito am 06. Sep. 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: 07. Sep. 2006 08:58 <-- editieren / zitieren --> Unities abgeben:         
Hi, auch das hab ich nun hinbekommen. Ich vergleiche, ob die Komponente (über deren Namen) in einem Array bereits vorhanden ist... wenn nein, speichere ich bei jeder Komponente deren Namen (ist eindeutiger ProE-Bezeichner) in das Array und lasse mir true bzw. false zurückgeben. Dementsprechend wird dann das verarbeiten der jeweiligen Komponente geregelt. Name speichern:
Code:
public boolean checkComponent(Model model) throws jxthrowable{ //ArrayList checkname = new ArrayList(); String arrayname; String modelname = model.GetFullName().toString(); try{ if(checkname.isEmpty() == true){ //ArrayList ist leer checkname.add(0,modelname); //modelname einfügen return true; //d.h. modelname noch nicht vorhanden } else{ //ArrayList ist gefüllt for(int i=0;i<checkname.size();i++){ arrayname = checkname.get(i).toString(); if(arrayname.equals(modelname)){ //modelname ist schon vorhanden return false; } } checkname.add(checkname.size(),modelname); //modelname an letzter Stelle einfügen return true; //modelname noch nicht vorhanden } }catch(Exception err){ System.out.println(err); } return false; }
Das klappt eigentlich prima Gruß Rico. PS.: Sorry, die Quellcodeformatierung sieht hier bisl ******** aus
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |