Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Position eines Objectes im Baum auslesen

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:  Position eines Objectes im Baum auslesen (1697 mal gelesen)
AndiKrue
Mitglied
Berater


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

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 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, 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


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

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 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 AndiKrue 10 Unities + Antwort hilfreich

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


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

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 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

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


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

Beiträge: 114
Registriert: 11.02.2005

win10, CATIA R19 bis R30

erstellt am: 15. Apr. 2009 09:13    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 AndiKrue 10 Unities + Antwort hilfreich

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


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

Beiträge: 114
Registriert: 11.02.2005

win10, CATIA R19 bis R30

erstellt am: 15. Apr. 2009 09:59    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 AndiKrue 10 Unities + Antwort hilfreich

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


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

Beiträge: 1385
Registriert: 13.01.2007

WIN 7 64bit
V5R21SP3HF49
3DX/V6 R2016x

erstellt am: 17. Apr. 2009 11:26    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 AndiKrue 10 Unities + Antwort hilfreich

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


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

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 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, danke für die Antwort, ich hatte mit mittlerweile selbst etwas gebastelt, aber die Lösung ist deutlich eleganter. Danke nochmal.

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