Makro zum Abrufen des Skizzennamens im 1. abgewickelten Zustand

Hallo

Ich möchte den Namen der 1. Skizze im aufgeklappten Zustand wiederherstellen, um sie bei Bedarf ein- oder auszublenden. (hier Faltlinie2, aber der Name ist nicht immer derselbe.)

 

Hier ist der gefundene und funktionierende Code, aber wenn Sie den Namen des Sketches kennen:

Dim swApp As Object
Dim boolstatus As Boolean
Sub main()

Set swApp = Application.SldWorks


Set Part = swApp.ActiveDoc
boolstatus = Part.ActivateView("Drawing View1")
boolstatus = Part.Extension.SelectByID2("Bend-Lines2@Part1@Drawing View1", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)
Part.BlankSketch
MsgBox "Ligne de pliage caché"
boolstatus = Part.Extension.SelectByID2("Bend-Lines2@Part1@Drawing View1", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)
Part.UnblankSketch
MsgBox "Ligne de pliage affiché"
End Sub

 

Hallo.

Sie können den Konstruktionsbaum mit den folgenden Methoden durchlaufen:

Funktionen (FirstFeature und GetNextFeature) 

SubFeature (GetFirstSubFeature und GetNextSubFeature)

Wir testen den Typ mit GetTypeName2

Auf der anderen Seite denke ich, dass Sie zuerst die Datei abrufen müssen, die an die Ansicht angehängt ist, die Datei öffnen und ihren Baum durchsuchen müssen, da Sie nur 2 Ebenen (Feature und SubFeature) haben.

Aber ich habe noch nie an einem entfalteten Zustand getestet. Vielleicht müssen Sie den aufgeklappten Zustand aktivieren

Herzliche Grüße.

1 „Gefällt mir“

Hallo. Versuchen Sie Folgendes:

Option Explicit
Sub main()
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swFeat As SldWorks.Feature
    Dim swSubFeat As SldWorks.Feature
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swFeat = swModel.FirstFeature
    While Not swFeat Is Nothing
        'Debug.Print swFeat.Name & " " & swFeat.GetTypeName2'
        If swFeat.GetTypeName2 = "FlatPattern" Then
            Set swSubFeat = swFeat.GetFirstSubFeature
            While Not swSubFeat Is Nothing
                If swSubFeat.GetTypeName2 = "ProfileFeature" Then
                    'Debug.Print swSubFeat.GetNameForSelection(0)'
                    swSubFeat.Select2 False, 0
                    If swSubFeat.Visible = swVisibilityState_e.swVisibilityStateShown Then
                        swModel.BlankSketch
                    Else
                        swModel.UnblankSketch
                    End If
                    swModel.ClearSelection2 True
                    Exit Sub
                End If
                Set swSubFeat = swSubFeat.GetNextSubFeature
            Wend
        End If
        Set swFeat = swFeat.GetNextFeature
    Wend
End Sub

 

1 „Gefällt mir“

Hallo

Die Antwort ist gut , JeromeP , aber nicht die Frage, sorry.

Um es anders auszudrücken: Es geht darum, dieses Makro von einem Abgeordneten aus zu machen. Ansonsten ist es perfekt funktionsfähig.

Ich habe so etwas versucht, aber  es fehlt etwas.

Dim swDraw As SldWorks.ModelDoc2       
Dim swView As SldWorks.View
Dim swFeat As SldWorks.Feature


Set swDraw = swModel
    Set swView = swDraw.GetFirstView
    Set swView = swView.GetNextView
    
    
    'Set swFeat = swModel.FirstFeature
    Set swFeat = swDraw.FirstFeature

 

Der Code ist für eine Zeichnung etwas anders

Option Explicit
Sub main()
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swDraw As SldWorks.DrawingDoc
    Dim swPartModel As SldWorks.ModelDoc2
    Dim swFeat As SldWorks.Feature
    Dim swSubFeat As SldWorks.Feature
    Dim swView As SldWorks.View
    Dim swSelMgr As SldWorks.SelectionMgr
    Dim boolstatus As Boolean
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swDraw = swModel
    Set swSelMgr = swModel.SelectionManager
    Set swView = swDraw.ActiveDrawingView
    If swView Is Nothing Then
        MsgBox "Sélectionner une vue"
        Exit Sub
    End If

    Set swPartModel = swView.ReferencedDocument
    Set swFeat = swPartModel.FirstFeature
    While Not swFeat Is Nothing
        'Debug.Print swFeat.Name & " " & swFeat.GetTypeName2'
        If swFeat.GetTypeName2 = "FlatPattern" Then
            Set swSubFeat = swFeat.GetFirstSubFeature
            While Not swSubFeat Is Nothing
                If swSubFeat.GetTypeName2 = "ProfileFeature" Then
                    Debug.Print swSubFeat.Name & "@" & swPartModel.GetTitle & "@" & swView.GetName2
                    boolstatus = swModel.Extension.SelectByID2(swSubFeat.Name & "@" & swPartModel.GetTitle & "@" & swView.GetName2, "SKETCH", 0, 0, 0, False, 0, Nothing, 0)
                    swModel.UnblankSketch
                    
                    swModel.ClearSelection2 True
                    Exit Sub
                End If
                Set swSubFeat = swSubFeat.GetNextSubFeature
            Wend
        End If
        Set swFeat = swFeat.GetNextFeature
    Wend
End Sub

Anmerkung: Durch Wiederholen des Makros wird die Sichtbarkeit der Skizze nicht wie beim vorherigen Makro von einem Zustand in den anderen geändert. Aber es beantwortet die ursprüngliche Frage.

1 „Gefällt mir“

Hallo

In der Tat ist es ganz anders, ich schaue es mir am Nachmittag an, wenn ich ein wenig Zeit habe. Vielen Dank.

Perfekt funktionsfähig, danke JeromeP .

Jetzt muss ich es nur noch in meinem vollständigen Makro anpassen, aber es wird nicht sehr kompliziert sein.