Autor
|
Thema: Position eines Objectes im Baum auslesen (1697 mal gelesen)
|
AndiKrue Mitglied Berater
Beiträge: 72 Registriert: 04.12.2008 Windows XP Prof x64 Edition Intel Xeon W3520 @ 2.67 GHz 8 GB RAM, Nvidia Quadro FX 1800 CATIA V5R19
|
erstellt am: 08. Apr. 2009 16:20 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich würde gerne die Position von einem selektiertem Objekt im Strukturbaum eines Parts auslesen, also GeoSet1 GeoSet2 Geoset3 Objekt1 <-- selektiert die Ausgabe, die ich brauche sollte dann so aussehen Geoset1/Geoset2/Geoset3/Objekt1 Hab ehrlich gesagt keine Ahnung, wie ich da drankomm soll. In Properties wird dieser Pfad ja von Catia angezeigt. Und wenn ich eine Formel erzeuge und auf ein Objekt doppelklicke wird das Objekt mir Pfad in die Formel eingefügt. Nur ich brauche das ganze als String. [Diese Nachricht wurde von AndiKrue am 08. Apr. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
Beiträge: 1118 Registriert: 29.05.2008 DELL PRECISION T3500 Intel(R) Xeon(R) CPU W3540 @ 2.93GHz 12285 MB RAM NVIDIA Quadro FX 1800 Microsoft Windows 7 Enterprise Service Pack 1 CATIA V5 R19 SP09 HF69 VB6.5 CAA RADE CDC
|
erstellt am: 09. Apr. 2009 11:03 <-- editieren / zitieren --> Unities abgeben: Nur für AndiKrue
Hallo AndiKrue, habe jetzt schon lange kein VB mehr programmiert, deshalb entschuldige bitte meien ungenauen Angaben. Aber wenn du ein Objekt selektiert hast, dann kannst du es aus der Selection auslesen. Also Selecion.Item(1).Value. Dieses Objekt musst du dann entsprechend casten. Dann kannst du auf die Methode Parent() zugreifen, die dir die Eltern (in dem Fall Geoset3) liefern wird. Dieses hat wieder ein Parent. Also entweder eine While-Schleife bis zum POart und immer den Namen davor schreiben oder einen rekrusiven Aufruf immer auf das Parent machen und den Namen an einen String anhängen. ------------------ Mit freundlichen Grüßen, Henry Schneider alias Lila Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren: Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen, die Natur versucht, immer bessere Idioten zu bauen Xing Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndiKrue Mitglied Berater
Beiträge: 72 Registriert: 04.12.2008 Windows XP Prof x64 Edition Intel Xeon W3520 @ 2.67 GHz 8 GB RAM, Nvidia Quadro FX 1800 CATIA V5R19
|
erstellt am: 09. Apr. 2009 11:27 <-- editieren / zitieren --> Unities abgeben:
Ok also ich beschreibs mal genauer, mit .parent.parent.name komme ich ans nächst übergeodnete Geoset, also Geoset 3. mache ich nun .parent.parent.parent.parent.name müsst man eigentlich an Geoset 2 kommen, tut man aber nicht, sondern er gibt Geoset 1 wieder, warum auch immer. Ich habe aber auch eine Lösung, mit .hybridbodies.parent.name kommt man auch ans nächst überliegende wenn die selection ein HB ist, mit .hybridbodies.parent.hybridbodies.parent.name dann auch wirklich an Geoset 2. usw. nun eine andere frage, wie packe ich das ganze in eine schleife? also so dass bei der nächsten wiederholung ".hybridbodies.parent" dem bestehenden befehl hinzugefügt wird? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ptit.tom Mitglied CAD-Berater
Beiträge: 114 Registriert: 11.02.2005 win10, CATIA R19 bis R30
|
erstellt am: 15. Apr. 2009 09:13 <-- editieren / zitieren --> Unities abgeben: Nur für AndiKrue
Hallo, Ich habe letztens ein ähnliche Fall gehabt: aus ein Objekt (polyline in meinem Fall) das Eltern part finden. Ich habe eine Schleife (Do...Loop Until), die die Eltern sucht:
Code: Function FindPartFromObject(oObject As AnyObject, oPart As Part) As Boolean Dim i As Integer Dim oParent As AnyObject i = 1 Set oParent = oObject Do Debug.Print "Parent.Name: " & oParent.Name Set oParent = oParent.Parent i = i + 1 Loop Until TypeName(oParent) = "PartDocument" Or i = 20 If TypeName(oParent) <> "PartDocument" Then MsgBox "Part not found" FindPartFromObject = False Else Set oPart = oParent.Part Debug.Print "Partnumber: " & oPart.Name FindPartFromObject = True End If End Function
I ist da, nur um zu vermeiden, das die Schleife unendlich läuft. Vielleicht kannst du in der Schleife mit TypeName prüfen ob das aktuell oParent ein Geometrical Set ist und den Name in einem String speichern. [Diese Nachricht wurde von ptit.tom am 15. Apr. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ptit.tom Mitglied CAD-Berater
Beiträge: 114 Registriert: 11.02.2005 win10, CATIA R19 bis R30
|
erstellt am: 15. Apr. 2009 09:59 <-- editieren / zitieren --> Unities abgeben: Nur für AndiKrue
Nochmal hallo, Ich habe einige Änderungen gemacht. Jetzt liefert das Code den Pfad bis zum Part: Code: Sub CATMain() Dim oDoc As Document Dim oPart As Part Dim oObject As AnyObject Dim cSelection ' As Selection Dim Status As String Dim InputObjectType(0) Dim sPath As String Dim i As Integer Dim oParent As AnyObject Set oDoc = CATIA.ActiveDocument '### SELECT SOMETHING ### Set cSelection = oDoc.Selection cSelection.Clear InputObjectType(0) = "AnyObject" Status = cSelection.SelectElement2(InputObjectType, "Select an Element", True) If (Status = "Cancel") Then MsgBox "nothing selected.", vbInformation, "Error" Exit Sub End If Set oObject = cSelection.Item(1).Value cSelection.Clear '### END SELECTION ### '### FIND PATH ### i = 1 Set oParent = oObject 'sPath = "/" & oObject.Name Do Debug.Print "Parent.Name: " & oParent.Name sPath = "/" & oParent.Name & sPath Set oParent = oParent.Parent i = i + 1 Loop Until TypeName(oParent) = "PartDocument" Or i = 20 Debug.Print VBA.Right(sPath, Len(sPath) - 1) End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tberger Mitglied Application Manager CATIA V5 / V6
Beiträge: 1385 Registriert: 13.01.2007 WIN 7 64bit V5R21SP3HF49 3DX/V6 R2016x
|
erstellt am: 17. Apr. 2009 11:26 <-- editieren / zitieren --> Unities abgeben: Nur für AndiKrue
Hallo, ich musste den Code etwas umschreiben, da "Debug" nicht als Funktion zur Verfuegung stand. Jetzt laeuft es, wenn man in einem Part Geometrie (z.B. einen Punkt) selektiert, es laeuft aber nicht, wenn man z.B. die Mantelflaechen von Rotationsfeatures selektiert (weil dann die Mittelachse, die es "nicht gibt" zum Abbruch fuehrt) Die Aenderungen stehen auskommentiert bzw. weiter eingerueckt: Sub CATMain() Dim oDoc As Document Dim oPart As Part Dim oObject As AnyObject Dim cSelection As Selection Dim Status As String Dim InputObjectType(0) As Array Dim sPath As String Dim i As Integer Dim oParent As AnyObject Dim Result As String Set oDoc = CATIA.ActiveDocument '### SELECT SOMETHING ### Set cSelection = oDoc.Selection cSelection.Clear InputObjectType(0) = "AnyObject" Status = cSelection.SelectElement2(InputObjectType, "Select an Element", True) If (Status = "Cancel") Then MsgBox "nothing selected.", vbInformation, "Error" Exit Sub End If Set oObject = cSelection.Item(1).Value cSelection.Clear '### END SELECTION ### '### FIND PATH ### i = 1 Set oParent = oObject 'sPath = "/" & oObject.Name Do ' Debug.Print "Parent.Name: " & oParent.Name sPath = "/" & oParent.Name & sPath Set oParent = oParent.Parent i = i + 1 Loop Until TypeName(oParent) = "PartDocument" Or i = 20 ' Debug.Print VBA.Right(sPath, Len(sPath) - 1) Result = Right(sPath, Len(sPath) - 1) MsgBox Result, vbInformation, "Result:" End Sub
Gruesse aus dem Rheinland Thomas ------------------ CATIA - eine Laune der Natur ... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndiKrue Mitglied Berater
Beiträge: 72 Registriert: 04.12.2008 Windows XP Prof x64 Edition Intel Xeon W3520 @ 2.67 GHz 8 GB RAM, Nvidia Quadro FX 1800 CATIA V5R19
|
erstellt am: 30. Apr. 2009 10:34 <-- editieren / zitieren --> Unities abgeben:
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|