Autor
|
Thema: Strukturbaum aus CATIA in VB einlesen (9205 mal gelesen)
|
Timberwolve Mitglied
Beiträge: 233 Registriert: 21.07.2006
|
erstellt am: 21. Jul. 2006 10:47 <-- editieren / zitieren --> Unities abgeben:
Hallo Leute, ich habe schon längere Zeit versucht den Strukturbaum in CATIA auszulesen und ihn über die Funktion Tree-View in VB einzulesen. Jedoch ist es mir bis Dato nicht gelungen. Das Tree-View muss separat gefüllt werden, sprich man muss die entsprechenden Product-Ebenen auslesen. Und hier habe ich schwierigkeiten. Hat von euch jemand schonmal was derartiges gemacht. Über schnelle Hilfe wäre ich dankbar. Grüße ------------------ Wenn alle Stricke reissen, nehm ich ein Drahtseil Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Augustiner Mitglied Konstrukteur
Beiträge: 188 Registriert: 02.12.2005 HP Workstation Windows XP Professional Visual Studio 2005 Professional CATIA V5 R14SP5 & R17SP3
|
erstellt am: 21. Jul. 2006 10:58 <-- editieren / zitieren --> Unities abgeben: Nur für Timberwolve
|
dr Mitglied CAD-/PLM-Entwickler und -Berater
Beiträge: 87 Registriert: 30.10.2001
|
erstellt am: 21. Jul. 2006 10:58 <-- editieren / zitieren --> Unities abgeben: Nur für Timberwolve
Ist nicht getestet, aber meinst Du sowas in der Art? Code:
Option Base 1 Sub CATMain()On Error Resume Next ' Some variable declarations Dim doc As Document Dim rootProduct As Product Dim rootName As String Set doc = CATIA.ActiveDocument If doc Is Nothing Then MsgBox "Please load a product - THEN activate this function!" Return End If Set rootProduct = doc.Product
visitProduct rootProduct End Sub Sub visitProduct(prod As Product)
On Error Resume Next Dim children As Products Set children = prod.Products Dim i As Integer Dim child As Product Dim number As String number = prod.Name MsgBox "visiting " & number For i = 1 To children.Count Set child = children.Item(i) visitProduct child Next End Sub
------------------ -- Danny Reinhold Reinhold Software Services [Diese Nachricht wurde von dr am 21. Jul. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dr Mitglied CAD-/PLM-Entwickler und -Berater
Beiträge: 87 Registriert: 30.10.2001
|
erstellt am: 21. Jul. 2006 10:59 <-- editieren / zitieren --> Unities abgeben: Nur für Timberwolve
Ach ja - der Code oben füllt nix, sondern traversiert lediglich die Produktstruktur und gibt die Nummern der Subparts/products aus... Ich hatte Dich so verstanden, dass genau das Dein Problem ist?
------------------ -- Danny Reinhold Reinhold Software Services Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Timberwolve Mitglied
Beiträge: 233 Registriert: 21.07.2006
|
erstellt am: 21. Jul. 2006 11:03 <-- editieren / zitieren --> Unities abgeben:
Also nochmal zur Ergänzung: 1.) Ich arbeite mit Visual Basic 6 2.) Der Strukturbaum, wie ich ihn in CATIA sehe (Product) soll im Tree-View abgebildet werden. Es handelt sich nur um Products und Parts, Komponenten werden nicht benötigt. Danke ------------------ Wenn alle Stricke reissen, nehm ich ein Drahtseil Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Timberwolve Mitglied
Beiträge: 233 Registriert: 21.07.2006
|
erstellt am: 21. Jul. 2006 11:05 <-- editieren / zitieren --> Unities abgeben:
zu dr. mmh dein Beispiel sucht nur nach Products, es kann jedoch sein, das auf erster Stufe z.B ein part und zwei Products stehen usw. also muss eigentlich ein Mischbetrieb funktionieren. Nameskonventionen kann ich nicht verwenden, da das ganze variabel bleiben soll. Also nicht auf ein product fixiert. ------------------ Wenn alle Stricke reissen, nehm ich ein Drahtseil Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dr Mitglied CAD-/PLM-Entwickler und -Berater
Beiträge: 87 Registriert: 30.10.2001
|
erstellt am: 21. Jul. 2006 11:10 <-- editieren / zitieren --> Unities abgeben: Nur für Timberwolve
|
dr Mitglied CAD-/PLM-Entwickler und -Berater
Beiträge: 87 Registriert: 30.10.2001
|
erstellt am: 21. Jul. 2006 11:20 <-- editieren / zitieren --> Unities abgeben: Nur für Timberwolve
Habe es gerade getestet. Lief nicht, das es keine Methode GetPartNumber gibt. Ich habe das Beispiel oben jetzt korrigiert - läuft nun und zeight auch Parts an. Für einen Blindflug war die erste Version aber schon gar nicht mal schlecht ------------------ -- Danny Reinhold Reinhold Software Services Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Timberwolve Mitglied
Beiträge: 233 Registriert: 21.07.2006
|
erstellt am: 21. Jul. 2006 11:34 <-- editieren / zitieren --> Unities abgeben:
Habe es auch getestet, musst jedoch nicht die Methode .Name benutzen. Geht auch einfach .PartNumber. ist sicherer. Mmh ja das könnte so funktionieren. hab nur das Problem mit den Productstufen. das kann ja beliebig verschachtelt sein ------------------ Wenn alle Stricke reissen, nehm ich ein Drahtseil Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dr Mitglied CAD-/PLM-Entwickler und -Berater
Beiträge: 87 Registriert: 30.10.2001
|
erstellt am: 21. Jul. 2006 11:41 <-- editieren / zitieren --> Unities abgeben: Nur für Timberwolve
Zitat: Mmh ja das könnte so funktionieren. hab nur das Problem mit den Productstufen. das kann ja beliebig verschachtelt sein
Welches Problem meinst Du? ------------------ -- Danny Reinhold Reinhold Software Services Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Timberwolve Mitglied
Beiträge: 233 Registriert: 21.07.2006
|
erstellt am: 21. Jul. 2006 11:51 <-- editieren / zitieren --> Unities abgeben:
Dein Makro sucht die Parts bzw. Products nacheinander ab, ich kann jedoch nicht feststellen auf welcher Strukturebene ich mich befinde. Schau dir das Bild an das ich angehängt habe. Ich muss dann später eigentlich so vorgehen das ich sage: 1. Auslesen der Products bzw. Parts auf der ersten Stufe, dann die jeweiligen Knoten im TreeView erzeugen. 2. Auslesen der Unterstrukturen usw. Das Ganze kann ja beliebig sein. ------------------ Wenn alle Stricke reissen, nehm ich ein Drahtseil Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dr Mitglied CAD-/PLM-Entwickler und -Berater
Beiträge: 87 Registriert: 30.10.2001
|
erstellt am: 21. Jul. 2006 11:55 <-- editieren / zitieren --> Unities abgeben: Nur für Timberwolve
Das kannst Du auf verschiedene Arten erreichen, am einfachsten vermutlich so: Code:
Option Base 1 Sub CATMain() On Error Resume Next' Some variable declarations Dim doc As Document Dim rootProduct As Product Set doc = CATIA.ActiveDocument If doc Is Nothing Then MsgBox "Please load a product - THEN activate this function!" Return End If Set rootProduct = doc.Product
visitProduct rootProduct, nothing, 1 End Sub Sub visitProduct(prod As Product, parent as product, level as integer)
On Error Resume Next Dim children As Products Set children = prod.Products Dim i As Integer Dim child As Product Dim number As String rem hier befinden wir uns in ebene "level" rem das parent des aktuellen produkt ist rem entweder "nothing" (dann befinden wir rem uns gerade auf oberster ebene) oder "parent". rem das aktuelle kind is prod rem An dieser Stelle kannst Du also einfach den aktuellen rem Knoten an die richtige Stelle im TreeView rem einbauen... number = prod.Name MsgBox visiting " & number For i = 1 To children.Count Set child = children.Item(i) visitProduct child, prod, level+1 Next End Sub
Noch einfacher ist es übrigens, wenn Du anstelle des "parent" Products einfach den aktuellen Knoten des TreeViews übergibst (nehme ich jedenfalls an). Dann muss man gar nicht mehr überlegen, wo man den aktuellen Knoten einbauen muss.
Die Struktur wird übrigens nicht einfach "der Reihe nach" durchwühlt. Die Struktur ist implizit durch die Rekursiven aufrufe von "visitProduct" durchaus noch vorhanden. Die Übergabe von Zusatzinformationen (wie hier beispielsweise "level" und "parent") macht die Struktur wieder explizit greifbar. Das von Dir beschriebene Vorgehen bezeichnet man übrigens als "Breitensuche", da man zunächst einmal alle Objekte einer Ebene besucht und erst dann tiefer steigt. In der Regel ist es bei CAD-Systemen aber einfacher eine sogenannte Tiefensuche durchzuführen (das macht auch mein Code oben). Man muss dann halt nur etwas rekursiver denken - aber Code und Speicherverbrauch sind in der Regel kürzer, kleiner und einfacher... Poste doch mal Deinen aktuellen TreeView Code... ------------------ -- Danny Reinhold Reinhold Software Services [Diese Nachricht wurde von dr am 21. Jul. 2006 editiert.] [Diese Nachricht wurde von dr am 21. Jul. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Timberwolve Mitglied
Beiträge: 233 Registriert: 21.07.2006
|
erstellt am: 21. Jul. 2006 12:07 <-- editieren / zitieren --> Unities abgeben:
Ok danke ich werds mal versuchen. Steh grad ehrlich gesagt ein bischen auf dem Schlauch aber hat mir zumindest schonmal ziemlich weitergeholfen. ------------------ Wenn alle Stricke reissen, nehm ich ein Drahtseil Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Timberwolve Mitglied
Beiträge: 233 Registriert: 21.07.2006
|
erstellt am: 21. Jul. 2006 12:15 <-- editieren / zitieren --> Unities abgeben:
Das ist der Quellcode des Treeview bisher. Jedoch ist hier noch nichts variabel, ich bin mit dem TreeView noch nicht sehr vertraut, deswegen wollte ich es erstmal von Hand befüllen. er erstellt jetzt erstmal 5 Vorzugsknoten und durch Schleifen dann jeweils 3 Unterknoten. Jetzt muss ich dein Makro nur noch darauf adaptieren. ---------------------------------------------------------------- Private Sub Form_Load() Dim nItem As Long Dim nKey As String Dim i As Integer Me.Show With trvCATIA.Nodes For nItem = 1 To 5 nKey = Chr$(64 + nItem) .Add(, , nKey, nKey).Expanded = True For i = 1 To 3 zAddSubNodes nKey, nKey & i, 2 Next 'i Next End With End Sub Private Sub zAddSubNodes(ParentKey As String, ThisKey As String, Depth As Integer) Dim i As Integer trvCATIA.Nodes.Add(ParentKey, tvwChild, ThisKey, ThisKey).Expanded = True If Depth Then For i = 1 To 3 zAddSubNodes ThisKey, ThisKey & i, Depth - 1 Next 'i End If End Sub ------------------ Wenn alle Stricke reissen, nehm ich ein Drahtseil Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dr Mitglied CAD-/PLM-Entwickler und -Berater
Beiträge: 87 Registriert: 30.10.2001
|
erstellt am: 21. Jul. 2006 12:47 <-- editieren / zitieren --> Unities abgeben: Nur für Timberwolve
Ich möchste Dich nicht um das Vergnügen bringen, selbst eine Lösung zu finden, aber so könnte man's machen: Code:
Option Base 1Sub CATMain() On Error Resume Next Dim f As UserForm1 Dim tree As TreeView Set f = New UserForm1 Set tree = f.TreeView1 ' Some variable declarations Dim doc As Document Dim rootProduct As Product Set doc = CATIA.ActiveDocument If doc Is Nothing Then MsgBox "Please load a product - THEN activate this function!" Return End If Set rootProduct = doc.Product visitProduct rootProduct, "", tree f.Show End Sub Sub visitProduct(prod As Product, parentKey As String, ByRef tree As TreeView) On Error Resume Next Dim children As Products Set children = prod.Products Dim i As Integer Dim child As Product Dim key As String Dim label As String label = prod.Name key = parentKey & "###" & prod.Name ' MsgBox "key: " & key & " parent: " & parentKey If parentKey = "" Then tree.Nodes.Add(, , key, label).Expanded = True Else tree.Nodes.Add(parentKey, tvwChild, key, label).Expanded = True End If For i = 1 To children.Count Set child = children.Item(i)
visitProduct child, key, tree Next End Sub
------------------ -- Danny Reinhold Reinhold Software Services [Diese Nachricht wurde von dr am 21. Jul. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Timberwolve Mitglied
Beiträge: 233 Registriert: 21.07.2006
|
erstellt am: 21. Jul. 2006 13:05 <-- editieren / zitieren --> Unities abgeben:
Respekt, funktioniert einwandfrei. Weisst du vielleicht wo es eine gute Dokumentation zum Tree-View selbst gibt?? Hab im Netz bisher nichts gescheites gefunden. Danke für die Hilfe ------------------ Wenn alle Stricke reissen, nehm ich ein Drahtseil Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dr Mitglied CAD-/PLM-Entwickler und -Berater
Beiträge: 87 Registriert: 30.10.2001
|
erstellt am: 21. Jul. 2006 13:13 <-- editieren / zitieren --> Unities abgeben: Nur für Timberwolve
|
Timberwolve Mitglied
Beiträge: 233 Registriert: 21.07.2006
|
erstellt am: 21. Jul. 2006 13:46 <-- editieren / zitieren --> Unities abgeben:
jetzt hab ich ein unerklärliches Problem. Das Programm habe ich als Exe kompiliert. und wollte es eigentlich über ein "CATScript" aus CATIA heraus starten. Dies hat so lang funktioniert bis ich die Routine mit dem TreeView eingebaut habe, nun startet es nicht mehr und CATIA stürzt ab. Hab es auch schon mit einem VBA versucht. geht auch nicht. Das seltsame ist, wenn ich CATIA geöffnet habe und starte das Programm aus dem Explorer heraus mit doppelklick funktioniert es wunderbar. ??????????????? Jetzt bin ich mit meinem Latein am ende ------------------ Wenn alle Stricke reissen, nehm ich ein Drahtseil Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dr Mitglied CAD-/PLM-Entwickler und -Berater
Beiträge: 87 Registriert: 30.10.2001
|
erstellt am: 21. Jul. 2006 13:54 <-- editieren / zitieren --> Unities abgeben: Nur für Timberwolve
Lass doch mal den Quelltext sehen. (Oder poste das gezippt Projekt...) Meine Vermutung: Irgendwo im Programm musst Du Dir ja das "Catia" Objekt holen. Ich nehme an, dass Du dafür "GetObject" verwendest. Wenn ein Catia aus Deinem Programm heraus gestartet werden muss, musst Du aber "CreateObject" benutzen... ------------------ -- Danny Reinhold Reinhold Software Services Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Timberwolve Mitglied
Beiträge: 233 Registriert: 21.07.2006
|
erstellt am: 21. Jul. 2006 14:16 <-- editieren / zitieren --> Unities abgeben:
Wie gesagt ohne TreeView hat es gefunzt. Ich will jedoch nicht das VB CATIA startet, soll auch nicht notwendig sein, da der Anwender das Programm über ein Symbol in CATIA selbst starten soll und nicht vom Explorer aus. Deswegen will und brauch ich auch kein CreateObject. Private Sub Form_Load() On Error Resume Next Dim CATIA As Object Set CATIA = GetObject(, "CATIA.Application") If CATIA Is Nothing Then MsgBox "Keine CATIA Sitzung gefunden", vbInformation, "Keine CATIA Sitzung" Unload Me Else 'Hier kommt dann die TreeView Operation End If End Sub
------------------ Wenn alle Stricke reissen, nehm ich ein Drahtseil Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dr Mitglied CAD-/PLM-Entwickler und -Berater
Beiträge: 87 Registriert: 30.10.2001
|
erstellt am: 21. Jul. 2006 14:21 <-- editieren / zitieren --> Unities abgeben: Nur für Timberwolve
Ok, dann fehlt vermutlich eine DLL. Sind in dem Verzeichnis, in dem die .EXE erstellt wird, irgendwelche DLLs vorhanden? Falls ja, füge das Verzeichnis doch mal Deiner PATH Umgebungsvariable hinzu und starte Catia dann nochmal neu. Ich weiss jetzt nicht, in welcher DLL die TreeView Komponente liegt, aber ich nehme an, dass diese DLL gefunden wird, wenn Du die .exe direkt im Explorer startest und eben nicht, wenn Du über ein CATScript startest... Das deutet wie gesagt, darauf hin, dass eine DLL gesucht wird, die direkt im Verzeichnis der .exe liegt.
------------------ -- Danny Reinhold Reinhold Software Services Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Timberwolve Mitglied
Beiträge: 233 Registriert: 21.07.2006
|
erstellt am: 21. Jul. 2006 14:33 <-- editieren / zitieren --> Unities abgeben:
Funzt auch nicht. Hab die comctl32.dll und comctl32.ocx in das Verzeichnis der Anwendung gestellt. Passiert jedoch nicht mehr als zuvor. mmh ärgerlich ------------------ Wenn alle Stricke reissen, nehm ich ein Drahtseil Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dr Mitglied CAD-/PLM-Entwickler und -Berater
Beiträge: 87 Registriert: 30.10.2001
|
erstellt am: 01. Aug. 2006 12:24 <-- editieren / zitieren --> Unities abgeben: Nur für Timberwolve
Hi, Hast Du das Problem mittlerweile lösen können? Ist immer interessant mögliche Ursachen für solche Probleme zu kennen (hilft vor allem dann, wenn technisch etwas unbedarftere Anwender Supportanfragen der Art 'Läuft nicht - was soll ich machen?' stellen)...
------------------ -- Danny Reinhold Reinhold Software Services Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Timberwolve Mitglied
Beiträge: 233 Registriert: 21.07.2006
|
erstellt am: 01. Aug. 2006 13:37 <-- editieren / zitieren --> Unities abgeben:
Naja lösen nicht unbedingt, Starte das Programm nun aus einem *.catvba Projekt heraus. Da funktioniert es mit dem glitzegleichen Code ohne Probleme. Aber warum es aus dem CatScript nicht startet ist mir leider immernoch ein Rätsel. Beim CatScript scheint die Exe erst loszulauffen wenn ich dann das hängen gebliebene CATIA über den Task-Manager kille. Aber warum das passiert weiss ich nicht genau. ------------------ Wenn alle Stricke reissen, nehm ich ein Drahtseil Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Timberwolve Mitglied
Beiträge: 233 Registriert: 21.07.2006
|
erstellt am: 02. Aug. 2006 08:47 <-- editieren / zitieren --> Unities abgeben:
Ups stimmt ja gar nicht was ich da gelesen habe. Das neue Script läuft mit einem Shell Befehl. Mit Catvba und dem ExecuteProcessus Befehl hat das ganze auch nicht gefunzt. Das nur als Info ------------------ Wenn alle Stricke reissen, nehm ich ein Drahtseil Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
weissda Mitglied ingenieur
Beiträge: 48 Registriert: 04.08.2006
|
erstellt am: 07. Aug. 2006 11:19 <-- editieren / zitieren --> Unities abgeben: Nur für Timberwolve
Hallo Habe eure Diskussion mitverfolgt und frecherweise den Navigations-Code für den CATIA-Strukturbaum auch ausprobiert. Mein Problem allerdings ist, dass der Code für das Produkt keine 'Children' findet, d.h. er bleibt beim Produkt stehen und sucht den rest des Baumes gar nicht ab. Woran das wohl liegen könnte?? Ich habe ein Bild meines Baums angehängt Gruss, Daniel. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dr Mitglied CAD-/PLM-Entwickler und -Berater
Beiträge: 87 Registriert: 30.10.2001
|
erstellt am: 07. Aug. 2006 12:10 <-- editieren / zitieren --> Unities abgeben: Nur für Timberwolve
Hallo Daniel, Zitat: Original erstellt von weissda: Mein Problem allerdings ist, dass der Code für das Produkt keine 'Children' findet, d.h. er bleibt beim Produkt stehen und sucht den rest des Baumes gar nicht ab. Woran das wohl liegen könnte??
Das liegt daran, dass wir über verschiedene Dinge reden. Mein Makro traversiert die Produktstruktur, also die Beziehung von Products zu Subproducts und Parts. Das, was Du scheinbar machen möchtest, ist eine Analyse des Featurebaums. Das macht man anders. Leider habe ich momentan etwas wenig Zeit und kann daher nicht mit einem Beispiel aufwarten. Vielleicht kann ich aber nachher noch was basteln... Ich bin ja immer neugierig... Wofür brauchst Du eine solche Analyse denn?
------------------ -- Danny Reinhold Reinhold Software Services Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
weissda Mitglied ingenieur
Beiträge: 48 Registriert: 04.08.2006
|
erstellt am: 10. Aug. 2006 13:09 <-- editieren / zitieren --> Unities abgeben: Nur für Timberwolve
Hallo Danny Ich möchte versuchen die Parameter und wenn möglich die Historie der Parts aus dem CATIA-Strukturbaum rauszulesen. Ich hatte ja ebenfalls eine Frage wegen der Wahl von CAA oder VB für diese Aufgabe gepostet. Ich habe inzwischen rausgefunden, dass die parameter des gesamten Produktes mit VB eingelesen werden können und da auch grad der 'Pfad', bzw. die Struktur des Baumes enthalten ist - das hilft schon weiter. Im Moment muss ich prüfen ob dies schon ausreicht oder ob ich noch zusätzliche Infos brauche. Danke für die Antwort. Gruss, Daniel. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
weissda Mitglied ingenieur
Beiträge: 48 Registriert: 04.08.2006
|
erstellt am: 10. Aug. 2006 13:11 <-- editieren / zitieren --> Unities abgeben: Nur für Timberwolve
|
dr Mitglied CAD-/PLM-Entwickler und -Berater
Beiträge: 87 Registriert: 30.10.2001
|
erstellt am: 11. Aug. 2006 14:03 <-- editieren / zitieren --> Unities abgeben: Nur für Timberwolve
Zitat: Original erstellt von weissda: P.s. wenn du irgendwann mal dazu kommst, mir trotzdem noch ein Bsp. für die Analyse des Feature-Baumes zu schicken, bin ich natürlich nach wie vor dankbar... :-)
Ich werde mal sehen, ob ich Anfang der nächsten Woche etwas Zeit finde. Momentan muss ich leider viel tun, damit ich mal wieder einige Rechnungen schreiben kann. Ist aber ja auch nicht das schlechteste... ------------------ -- Danny Reinhold Reinhold Software Services Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Avallyn Mitglied Auszubildende Fachinformatikerin AE
Beiträge: 1 Registriert: 17.09.2008 Win XP, CATIA V5 R18
|
erstellt am: 17. Sep. 2008 14:30 <-- editieren / zitieren --> Unities abgeben: Nur für Timberwolve
Hallo an alle hier, da ich mich im Rahmen meiner Ausbildung in letzter Zeit auch mit dem Auslesen des Strukturbaums beschäftigen musste, waren mir die bisherigen Beiträge eine große Hilfe. Danke! :-) Mittlerweile habe ich eine Code-sparendere Variante entwickelt, die aber genau das Gleiche macht (Ich hoffe es fühlt sich jetzt niemand auf den Schlips getreten, will nur helfen Code zu sparen, muss ja auch jeder für sich selbst wissen): Code:
Private Sub Form_Load() On Error Resume Next 'Erzeugen des Ankerobjekts Dim CATIA As INFITF.Application Set CATIA = GetObject(, "CATIA.Application") If CATIA Is Nothing Then MsgBox "Keine CATIA Sitzung gefunden", vbInformation, _ "Keine CATIA Sitzung" Unload Me Else Call CreateTreeView(CATIA.ActiveDocument.Product, _ TreeViewCATIA) 'TreeViewCATIA ist meine zu erzeugende TreeView End If End Sub Private Sub CreateTreeView(p As Product, ByRef tree As TreeView, _ Optional parentKey As String) On Error Resume Next If (tree.Nodes.Count = 0) Then 'Die RootNode anlegen Call tree.Nodes.Add(, , p.Name, p.PartNumber & " " & p.Name) Else 'Die SubNode oder SubSubNode anlegen Call tree.Nodes.Add(parentKey, tvwChild, p.Name, _ p.PartNumber & " " & p.Name) End If Dim i As Integer For i = 1 To p.Products.Count Call CreateTreeView(p.Products.Item(i), tree, p.Name) Next i End Sub
Ich hoffe ich kann damit auch allen Nachfolgenden mit gleichem Problem helfen. Viele Grüße :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |