Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  übergeordnete Products ermitteln.

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
Autor Thema:  übergeordnete Products ermitteln. (638 mal gelesen)
Fleischhauer
Mitglied


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

Beiträge: 8
Registriert: 19.11.2007

erstellt am: 19. Nov. 2007 09:43    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

Hallo,

habe mehrere in einander geschachtelte Products.

Jetzt möchte ich immer das übergeordnete Product ermitteln, bis ich am obersten Product angelangt bin.

Mit "ReferenceProduct.Parent;" zeigt er mir nur einmalig das übergeordnete an.

Code:

while(strFather != strLevel_0_Name)
{
prdLevel_1 = prdFather;
strLevel_1_Name = prdFather.get_Name();

pdFather = (ProductDocument) prdFather.ReferenceProduct.Parent;
prdFather = pdFather.Product;
strFather = prdFather.get_Name();

}



danke schon mal

[Diese Nachricht wurde von Fleischhauer am 19. Nov. 2007 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

ize
Mitglied
Student


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

Beiträge: 28
Registriert: 27.09.2007

erstellt am: 19. Nov. 2007 10:52    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 Fleischhauer 10 Unities + Antwort hilfreich

was ist denn strFather und strLevel_0_Name? wo werden die initalisiert?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Fleischhauer
Mitglied


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

Beiträge: 8
Registriert: 19.11.2007

erstellt am: 19. Nov. 2007 11:01    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

strFather (Typ String) ist der Name des übergeordneten Products
und strLevel_0_Name soll der Name des Products werden/sein der direkt unter dem obersten Product liegt.

Ist das versändlichß

Das Programm schreibe ich in C#, deswegen ist die Syntax minimal anders

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

ize
Mitglied
Student


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

Beiträge: 28
Registriert: 27.09.2007

erstellt am: 19. Nov. 2007 12:47    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 Fleischhauer 10 Unities + Antwort hilfreich

ja, aber wenn du sie vergleichst müssen sie ja mit irgendeinem Wert initialisiert sein und die beiden wären mal ganz interessant

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Fleischhauer
Mitglied


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

Beiträge: 8
Registriert: 19.11.2007

erstellt am: 19. Nov. 2007 13:27    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

Das ist die Methode mit Initialisierung.

Ich schau als erstes nach wie der Instanzname des obersten Products ist (strLevel_0_Name)
dann möchte in der while-Schleife vom "Ausgangsproduct" immer ein Product hochwandern, bis ich
im obersten Product bin.

prdLevel_1 vom Typ Product ist das Product, von dem die Suche aus gestartet wird.

Code:

public static string getInstanznameLevel1(string Instanzname)
{
  ProductDocument pdLevel_0 = (ProductDocument) CatiaSharp.ActiveDocument;

  Product prdLevel_0 = pdLevel_0.Product;
  Product prdLevel_1 = CatiaSharp.getProduct(Instanzname).ReferenceProduct;

  ProductDocument pdFather = (ProductDocument) prdLevel_1.ReferenceProduct.Parent;
  Product prdFather = pdFather.Product;

  string strLevel_0_Name = pdLevel_0.Product.get_Name();
  string strLevel_1_Name = prdLevel_1.get_Name();
  string strFather = pdFather.get_Name();

  while(strFather != strLevel_0_Name)
  {
      prdLevel_1 = prdFather;
      strLevel_1_Name = prdFather.get_Name();

      ProductDocument pdFathero = (ProductDocument) prdFather.ReferenceProduct.Parent;
      prdFather = pdFathero.Product;

      strFather = prdFather.get_Name();
  }


  strLevel_1_Name = prdLevel_1.get_Name();
  return strLevel_1_Name;
}



Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

ize
Mitglied
Student


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

Beiträge: 28
Registriert: 27.09.2007

erstellt am: 19. Nov. 2007 13:41    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 Fleischhauer 10 Unities + Antwort hilfreich

Sieht so aufn ersten blick ganz ok aus,
sicher, dass es nicht nur 3 Ebenen gibt?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Fleischhauer
Mitglied


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

Beiträge: 8
Registriert: 19.11.2007

erstellt am: 19. Nov. 2007 13:49    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

sicher ist das leider nicht, deswegen wollte ich die Ermittlung in einer Schleige durchführen.
Verstehen nicht warum ich nicht bzw. nur ein Product höher komme und nicht weiter.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

ize
Mitglied
Student


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

Beiträge: 28
Registriert: 27.09.2007

erstellt am: 19. Nov. 2007 13:57    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 Fleischhauer 10 Unities + Antwort hilfreich

naja du fängst ja schonmal an, indem du den vater vom eigentlichen produkt nimmst.
dann vergleichst du und nimmst den nächsten, also wenn es nur drei ebenen gibt,
bist du mit einem durchlauf dabei.
Hast du kein bekanntes Produkt mit dem du das testen kannst?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Fleischhauer
Mitglied


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

Beiträge: 8
Registriert: 19.11.2007

erstellt am: 19. Nov. 2007 14:33    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

Doch mach ich ja, aber die Schleife wird nicht verlassen.
Wenn ich in der Beispielstruktur

Prod_1
I-Prod2
I--Prod3
I---Prod4

von Prod4 aus starte, bekomme ich als ergebnis Prod3.
Dann wird mir als "Vater" oder übergeordnetes Product wieder Prod3 anstatt Prod2 zurückgegeben.
Das ist das seltsame daran.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

ize
Mitglied
Student


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

Beiträge: 28
Registriert: 27.09.2007

erstellt am: 19. Nov. 2007 16:03    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 Fleischhauer 10 Unities + Antwort hilfreich

das ist jetzt mehr so pseudo c#, da ich das nit kann:

Code:

public static string  getInstanzLevel(string instanzname, string level1) {
    if (level1 != instanzname) {
        Product prod = CatiaSharp.getProduct(instanzname).ReferenceProduct;
        // wenn du ne ausgabe willst
        // System.out.println(instanzname + "\n"); oder so   
        return getInstanzLevel(prod.Parent.Product.get_Name());
    }
    return instanzname;
}

is halt mal rekursiv, probiers mal

edit:
musst nur sicher sein dass level1 irgendwann wirklich instanzname sein kann
sonst ist dein speicher wohl bald voll

[Diese Nachricht wurde von ize am 19. Nov. 2007 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Lusilnie
Mitglied



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

Beiträge: 1486
Registriert: 13.07.2005

erstellt am: 19. Nov. 2007 21:05    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 Fleischhauer 10 Unities + Antwort hilfreich

Hallo Fleischhauer,

ich glaube, Du hast da einen Denkfehler!

Du willst vom ReferenceProduct die Parent(s?) ermitteln, aber normalerweise weiß doch das Product-Document nicht, in welchen Producten es verwendet wird. Also müsstest Du doch nur mit der Instance arbeiten, d.h. mit jeweils ".Parent" bzw. ".Parent.Parent" müsstest Du bis zum RootProduct kommen.


mfg,
Lusilnie

------------------

Alle Aussagen zu DassaultSystemes-Produkten sind sehr optimistisch, selbst diese!!!

frei nach größeren Geistern

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Fleischhauer
Mitglied


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

Beiträge: 8
Registriert: 19.11.2007

erstellt am: 20. Nov. 2007 08:34    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

Danke Euch Beiden, das Problem ist gelöst!
Der Fehler war die Verwendung der ProductDocuments (wie o.g.).

so Funktioniert die Mehtode jetzt wie gewünscht.

Code:

public static string getInstanznameLevel1(string Instanzname)
{
  ProductDocument pdLevel_0 = (ProductDocument) CatiaSharp.ActiveDocument;
  Product prdLevel_0 = pdLevel_0.Product;
  string strLevel_0_Name = pdLevel_0.Product.get_Name();

  Product prdLevel_1 = CatiaSharp.getProduct(Instanzname);
  string strLevel_1_Name = prdLevel_1.get_Name();

  Product prdFather = (Product) prdLevel_1.Parent;
  string strFather = prdFather.get_Name();

  while(strFather != strLevel_0_Name)
  {
      prdLevel_1 = prdFather;
      strLevel_1_Name = prdFather.get_Name();

      prdFather = (Product) prdFather.Parent;

      strFather = prdFather.get_Name();
  }

  strLevel_1_Name = prdLevel_1.get_Name();
  return strLevel_1_Name;
}


Bis zum nächsten mal 

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)2023 CAD.de | Impressum | Datenschutz