Autor
|
Thema: übergeordnete Products ermitteln. (638 mal gelesen)
|
Fleischhauer Mitglied
Beiträge: 8 Registriert: 19.11.2007
|
erstellt am: 19. Nov. 2007 09:43 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 28 Registriert: 27.09.2007
|
erstellt am: 19. Nov. 2007 10:52 <-- editieren / zitieren --> Unities abgeben: Nur für Fleischhauer
|
Fleischhauer Mitglied
Beiträge: 8 Registriert: 19.11.2007
|
erstellt am: 19. Nov. 2007 11:01 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 28 Registriert: 27.09.2007
|
erstellt am: 19. Nov. 2007 12:47 <-- editieren / zitieren --> Unities abgeben: Nur für Fleischhauer
|
Fleischhauer Mitglied
Beiträge: 8 Registriert: 19.11.2007
|
erstellt am: 19. Nov. 2007 13:27 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 28 Registriert: 27.09.2007
|
erstellt am: 19. Nov. 2007 13:41 <-- editieren / zitieren --> Unities abgeben: Nur für Fleischhauer
|
Fleischhauer Mitglied
Beiträge: 8 Registriert: 19.11.2007
|
erstellt am: 19. Nov. 2007 13:49 <-- editieren / zitieren --> Unities abgeben:
|
ize Mitglied Student
Beiträge: 28 Registriert: 27.09.2007
|
erstellt am: 19. Nov. 2007 13:57 <-- editieren / zitieren --> Unities abgeben: Nur für Fleischhauer
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
Beiträge: 8 Registriert: 19.11.2007
|
erstellt am: 19. Nov. 2007 14:33 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 28 Registriert: 27.09.2007
|
erstellt am: 19. Nov. 2007 16:03 <-- editieren / zitieren --> Unities abgeben: Nur für Fleischhauer
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
Beiträge: 1486 Registriert: 13.07.2005
|
erstellt am: 19. Nov. 2007 21:05 <-- editieren / zitieren --> Unities abgeben: Nur für Fleischhauer
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
Beiträge: 8 Registriert: 19.11.2007
|
erstellt am: 20. Nov. 2007 08:34 <-- editieren / zitieren --> Unities abgeben:
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 |