Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Pro ENGINEER
  Jlink: Komponenten - mehrfaches Vorkommen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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



Sehen Sie sich das Profil von magic_halli an!   Senden Sie eine Private Message an magic_halli  Schreiben Sie einen Gästebucheintrag für magic_halli

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von magic_halli an!   Senden Sie eine Private Message an magic_halli  Schreiben Sie einen Gästebucheintrag für magic_halli

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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

Sehen Sie sich das Profil von moskito an!   Senden Sie eine Private Message an moskito  Schreiben Sie einen Gästebucheintrag für moskito

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für magic_halli 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von magic_halli an!   Senden Sie eine Private Message an magic_halli  Schreiben Sie einen Gästebucheintrag für magic_halli

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz