Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Von selektiertem Grafikobjekt (3D Bereich) zu Baumobjekt

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:  Von selektiertem Grafikobjekt (3D Bereich) zu Baumobjekt (864 mal gelesen)
surfhai
Mitglied
Konstruktions Ingenieur


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

Beiträge: 435
Registriert: 11.08.2004

CATIA Version 5-6 Release 2016 64Bit SP3 Build Number 26 Hotfix 47

erstellt am: 05. Jul. 2019 08:47    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 zusammen,

ich habe mir ein Makro geschrieben, um die selektierten Objekte umzubenennen. Wenn ich allerdings im Grafikbereich etwas auswähle, dann bekomme ich folgende Ausgabe von diesem Makro:

Code:
17;13);None:(Limits1:();Limits2:();+1);Cf11:());Sketch.17;Z0;G6721)
name type  ZeroDimFeatVertexOrWireBoundaryMonoDimFeatVertex
name before Selection_BorderFVertex:(BEdge:(Brp:(Sketch.17;13);None:(Limits1:();Limits2:();+1);Cf11:());Sketch.17;Z0;G6721)
name after  ZeroDimFeatVertexOrWireBoundaryMonoDimFeatVertex.17;13);None:(Limits1:();Limits2:();+1);Cf11:());Sketch.17;Z0;G6721)

Meine Frage wäre nun, wie komme ich von einem selektierten Objekt im Grafikbereich zu dem entsprechenden Feature im Baum?
Beispiel: Ich selektiere einen Vertex von einem Sketch, will im Makro aber auf den Sketch zugreifen, um diesen umzubenennen. Den Vertex allein kann ich ja nicht umbenennen.


Code:
Sub CATMain()
'Sub RenameSelectedFeatures()

'Rename selected Features with promped name

'following References are needed
'Tools - References... - Microsoft Scripting Runtime

    Dim i As Integer
    Dim feature_name As String
    Dim type_name As String
    Dim type_count As String
    Dim point_pos As Integer
    Dim obj_sel As Selection
    Set obj_sel = CATIA.ActiveDocument.Selection
   
    Dim dict As Scripting.Dictionary
    Set dict = New Scripting.Dictionary

    'speed up the macro execution
    CATIA.RefreshDisplay = False
    CATIA.Application.DisplayFileAlerts = False
    CATIA.HSOSynchronized = False
   
    If obj_sel.Count > 0 Then
        'count the types of the selection
        For i = 1 To obj_sel.Count
            type_name = TypeName(obj_sel.Item(i).Value)
            If dict.Exists(type_name) Then
                dict(type_name) = dict(type_name) + 1
            Else
                dict.Add Key:=type_name, Item:=1
            End If
        Next i
       
        'store only key value pairs where more than one is in the selection
        For Each Key In dict.Keys
            If dict(Key) = 1 Then
                dict.Remove Key
            Else
                dict(Key) = 1
            End If
        Next Key
       
        'do the renaming
        For i = 1 To obj_sel.Count
            'get the predefined name of the selection
            If i = 1 Then
                feature_name = obj_sel.Item(i).Value.Name
               
                point_pos = InStr(1, feature_name, ".")
               
                If point_pos Then
                    feature_name = Mid(feature_name, point_pos + 1)
                End If
               
                Debug.Print feature_name
               
                feature_name = InputBox("Enter the feature name.", "Feature Name", feature_name)
                If feature_name = "" Then
                    Exit Sub
                End If
            End If
           
            type_name = obj_sel.Item(i).Type
           
            'increase type counter
            If dict.Exists(type_name) Then
                type_count = dict(type_name)
                dict(type_name) = dict(type_name) + 1
            Else
                type_count = 0
            End If
           
            'rename internal names to displayed names
            Select Case type_name
                Case "AxisSystem"
                    type_name = "Axis System"
                Case "HybridShapeAssemble"
                    type_name = "Join"
                Case "HybridShapeLoft"
                    type_name = "Multi-sections Surface"
                Case "HybridBody"
                    type_name = ""
            End Select
           
            'adjust the type_name where "HybridShape" is in front of the name
            If Left(type_name, 11) = "HybridShape" Then
                type_name_length = Len(type_name)
                If type_name_length > 12 Then
                    For x = 13 To type_name_length
                        If UCase(Mid(type_name, x, 1)) = Mid(type_name, x, 1) Then
                            type_name = Mid(type_name, 12, x - 12)
                            Exit For
                        ElseIf x = type_name_length Then
                            type_name = Mid(type_name, 12)
                            Exit For
                        End If
                    Next x
                End If
            End If
           
            'add counter only for types where more than one in the selection
            If type_count > 0 And Len(type_name) Then
                name_complete = type_name & "." & feature_name & " " & type_count
            ElseIf type_count = 0 And Len(type_name) Then
                name_complete = type_name & "." & feature_name
            Else
                name_complete = feature_name
            End If
           
            Debug.Print "name type  " & obj_sel.Item(i).Type
            Debug.Print "name before " & obj_sel.Item(i).Value.Name
            Debug.Print "name after  " & name_complete & vbCrLf
           
            'rename it finally
            obj_sel.Item(i).Value.Name = name_complete
        Next
    Else
        MsgBox "Select at least one feature."
    End If
   
    Set obj_sel = Nothing
   
    'reset the values
    CATIA.RefreshDisplay = True
    CATIA.Application.DisplayFileAlerts = True
    CATIA.HSOSynchronized = True
   
End Sub


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

Randle
Mitglied
CAD/PLM Consultant


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

Beiträge: 695
Registriert: 12.04.2003

Win10 x64
CATIA V5 R18, R19, R21, R27-29

erstellt am: 05. Jul. 2019 12:07    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 surfhai 10 Unities + Antwort hilfreich

Hallo,

das ist weil der Anwender in diesen Fällen BREP Elemente ausgewählt hat. Es mag zwar auch möglich sein den String zu analysieren und Rückschlüsse auf das entsprechende Objekt zu ziehen. Ich würde hier allerdings einen Filter für die Selection definieren.

Gruß
Randle

------------------
Wer für nichts steht, fällt für alles!

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

surfhai
Mitglied
Konstruktions Ingenieur


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

Beiträge: 435
Registriert: 11.08.2004

CATIA Version 5-6 Release 2016 64Bit SP3 Build Number 26 Hotfix 47

erstellt am: 17. Jul. 2019 16:14    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

Wie soll so ein Filter aussehen? Manche HybridShape Elemente haben einen so langen Namen, dass die Länge schon einmal wegfällt. Vielleicht sobald eine Klammer im Namen vorkommt?

Edit: Ich habe es jetzt so gelöst...

Code:
On Error Resume Next

[Diese Nachricht wurde von surfhai am 17. Jul. 2019 editiert.]

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 17. Jul. 2019 18:16    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 surfhai 10 Unities + Antwort hilfreich

Servus

Hie rein Beispiel für so einen Filter:

Code:
ReDim sFilter(4)
sFilter(0) = "Shape"
sFilter(1) = "HybridShape"
sFilter(2) = "Body"
sFilter(3) = "HybridBody"
sFilter(4) = "Sketch"

Set oSel = Catia.ActiveDocument.Selection

Status = oSel.SelectElement2 (sFilter, "Bitte selektiere etwas",false)


ggf noch weiteres ergänzen.

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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