Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Strukturbaum abbilden

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:  Strukturbaum abbilden (987 mal gelesen)
Florian.Held
Mitglied
Konstruktiver Spritzer (Konstruktion Spritzguss)


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

Beiträge: 35
Registriert: 13.07.2005

CATIA R14 SP5 unter WinXP64 und Unix (vbscript)

erstellt am: 23. Jul. 2005 12:45    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


Strukturbaum_MSGBOX.jpg

 
Hi,

ich muss den Strukturbaum abbilden, sprich alle Producte, Komponenten und Parts auflisten (z.B. in Form einer MsgBox) -> Siehe Bild.

Dass Bild habe ich mit folgendem Makro erzeugt:

'**********************************************************************
Sub CATMain()

Set Basic = CATIA.ActiveDocument
'tstr = tstr &  & vbcrlf
tstr = "" & vbcrlf

tstr = tstr & "Struktur von " & Basic.Product.Name & ":" & vbcrlf

for a = 1 to Basic.Product.Products.count
tstr = tstr & Basic.Product.Products.item(a).PartNumber & vbcrlf
if Basic.Product.Products.item(a).Products.count > 0 then

for b = 1 to Basic.Product.Products.item(a).Products.count
tstr = tstr & Basic.Product.Products.item(a).Products.item(b).PartNumber & vbcrlf
if Basic.Product.Products.item(a).Products.item(b).Products.count > 0 then

for c = 1 to Basic.Product.Products.item(a).Products.item(b).Products.count
tstr = tstr & Basic.Product.Products.item(a).Products.item(b).Products.item(c).PartNumber & vbcrlf
if Basic.Product.Products.item(a).Products.item(b).Products.item(c).Products.count > 0 then

for d = 1 to Basic.Product.Products.item(a).Products.item(b).Products.item(c).Products.count
tstr = tstr & Basic.Product.Products.item(a).Products.item(b).Products.item(c).Products.item(d).PartNumber & vbcrlf
if Basic.Product.Products.item(a).Products.item(b).Products.item(c).Products.item(d).Products.count > 0 then

for e = 1 to Basic.Product.Products.item(a).Products.item(b).Products.item(c).Products.item(d).Products.count
tstr = tstr & Basic.Product.Products.item(a).Products.item(b).Products.item(c).Products.item(d).Products.item(e).PartNumber & vbcrlf
if Basic.Product.Products.item(a).Products.item(b).Products.item(c).Products.item(d).Products.item(e).Products.count > 0 then

end if
next

end if
next

end if
next

end if
next

end if
next

msgbox tstr
End Sub
'**********************************************************************

So, erstens sau umständlich und zweitens auf 5 Ebenen der tiefe des Strukturbaums begrenzt.

Kennt jemand eine möglichkeit wie ich dies dynamisch realisieren kann?

Ich müsste quasie die ganzen aneinandergereihten Blöcke Products.item() durch etwas ersetzen was ich mit einer schleife durchlaufen kann (z.B. in einer Funktion).
Durchlaufe ich diese Schleifen und merke, dass Teil hat noch Unterstrukturen muss ich die Funktion nochmals aufrufen und dort eine Schleife durchlaufen bis ich alle Unterstrukturen ausgelesen hab, dann regulär weiter nach der Stelle der unterbrechung bis eben der Baum zu ende ist.

Ist aber leichter gesagt wie getan.

Ich denke dass könnte mir am meisten helfen:
--------------------------------------------

Um auf dem Name des Productes S_1.1.1 zugreifen zu können brauche ich folgenden Befehl:

Basic.Product.Products.item(a).Products.item(b).Products.item(c).PartNumber

Kann ich bei diesem Befehl die Passage
// Basic.Product.Products.item(a).Products.item(b).Products.item(c)
durch einen Bezeichner ersetzen der direkt über den Namen S_1.1.1 (getitem oder so) mir diese Passage ersetzt? Dann könnte ich mit
// BEZEICHNER.Proucts.count
weiterarbeiten und nicht mit
// Basic.Product.Products.item(a).Products.item(b).Products.item(c).Products.count
was ja nicht dynmisch wäre

Danke für alle Zuschriften und Ideen!

------------------
Es gibt nichts langweiligeres als ein vollständiges, stabil laufendes Catia...

[Diese Nachricht wurde von Florian.Held am 23. Jul. 2005 editiert.]

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

tomtom1972
Mitglied
dipl ing maschinenbau


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

Beiträge: 605
Registriert: 22.03.2005

NVidia Quadro K4000
Intel Xeon E5-1620, 64GB RAM
Windows10 64bit
R30 <= CATIA V5 > =R19

erstellt am: 25. Jul. 2005 06: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 Nur für Florian.Held 10 Unities + Antwort hilfreich

Hallo,

das Prinzip hast du ja schon selbst beschrieben:
Was dir hier weiterhilft ist eine Rekursive Funktion.
Dein Script beschränkt sich auf 5 Schleifen (= Strukturtiefe), weil du eben fünf Absätze (for a = ... bis for e = ) dafür vorgesehen hast.
Reduziere es auf einen (eine Struktureben auswerten). Falls Products (oder Components) mit einem Item.Count > 0 auftreten, muss sich die Funktion am Ende selbst aufrufen und das betrefende Product als neue Eingangsgröße an die aufgerufene Funktion (also an sich selbst)übergeben. Das Object, dem du das Product zuweist, darf dabei nicht global definiert sein (also nicht public). Alles, was du während des "scannens" erfasst, in ein mehrdimensionales, dynamisches Array legen und dieses am Ende auswerten... .
Das funktioniert bestens.

Hoffe es hilft, Gruss

TomTom

------------------
tomtom1972

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