Accès au données d'une pièce via l'API SolidWorks 2021

Bonjour,
Je travaille sur l’API solidwork et j’essaye d’accéder aux informations contenues dans une pièce. Je travaille sur des pièces a longueur, composé d’une extrusion, et parfois un enlèvement de matière.
J’ai réussi a récupérer les dimensions de l’extrusion avec mon code, cependant des congés d’esquisse sont présent, et j’aimerai pouvoir les exclure.

J’ai donc essayé de trouver l’esquisse correspondante a l’extrusion pour pouvoir lire les données. J’ai réussi a trouver le nom de l’esquisse mais impossible d’accéder aux donnée. J’ai régulièrement le message d’erreur « Propriété ou méthode non géré par cet objet ». Je dois louper quelque chose dans la manipulation des objets.
J’ai vu l’existence du SketchManager, mais je ne comprends pas comment l’utiliser.

Voila mon code :

Sub GetExtrusionDimensions()

' Initialize SolidWorks application and get the active document
Dim swApp As SldWorks.SldWorks
Dim Part As ModelDoc2
Dim Feature As Feature
Dim ExtrudeFeat As ExtrudeFeatureData
Dim DisplayDim As DisplayDimension
Dim DimVal As Dimension
Dim MsgStr As String

Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc

' Check if the active document is a part file
If Part Is Nothing Or Part.GetType <> swDocPART Then
    MsgBox "Veuillez ouvrir une pièce avant d'exécuter ce script.", vbCritical
    Exit Sub
End If

' Start with the first feature in the part
Set Feature = Part.FirstFeature
MsgStr = "Dimensions des extrusions :" & vbNewLine & vbNewLine

' Loop through each feature in the feature tree
Do While Not Feature Is Nothing

    ' Check if the feature is an extrusion
    If Feature.GetTypeName2 = "Extrusion" Then
        ' Access extrusion-specific data
        Set ExtrudeFeat = Feature.GetDefinition

        If Not ExtrudeFeat Is Nothing Then
            MsgStr = MsgStr & "Fonction : " & Feature.Name & vbNewLine

            ' Access display dimensions
            Set DisplayDim = Feature.GetFirstDisplayDimension
            Do While Not DisplayDim Is Nothing
                ' Get the linked dimension object
                Set DimVal = DisplayDim.GetDimension
                If Not DimVal Is Nothing Then
                    MsgStr = MsgStr & "  Dimension : " & DimVal.FullName & " = " & DimVal.Value & " mm" & vbNewLine
                End If
                ' Move to the next display dimension
                Set DisplayDim = Feature.GetNextDisplayDimension(DisplayDim)
            Loop
            
            MsgStr = MsgStr & vbNewLine
        End If
    End If

    ' Move to the next feature in the tree
    Set Feature = Feature.GetNextFeature

Loop

' Display the extracted information
MsgBox MsgStr, vbInformation, "Résultats"

End Sub

Et mon code pour trouver les relations parents des Feature:
Sub ListFeatureParents()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeature As SldWorks.Feature
Dim swParentFeature As SldWorks.Feature
Dim vParents As Variant
Dim i As Integer

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

If swModel Is Nothing Then
    MsgBox "Aucun document actif. Veuillez ouvrir une pièce.", vbExclamation
    Exit Sub
End If

If swModel.GetType <> swDocPART Then
    MsgBox "Ce script fonctionne uniquement avec des pièces.", vbExclamation
    Exit Sub
End If

' Boucle à travers toutes les fonctions
Set swFeature = swModel.FirstFeature
Do While Not swFeature Is Nothing
    ' Afficher le nom et le type de la fonction
    Debug.Print "Feature: " & swFeature.Name & " (" & swFeature.GetTypeName2 & ")"
    
    ' Récupérer les parents de la fonction
    vParents = swFeature.GetParents
    If Not IsEmpty(vParents) Then
        For i = LBound(vParents) To UBound(vParents)
            Set swParentFeature = vParents(i)
            If Not swParentFeature.Name = "face" Or swParentFeature.Name = "Origine" Then
            Debug.Print "  -> Parent Feature: " & swParentFeature.Name & " (" & swParentFeature.GetTypeName2 & ")"
            End If
        Next i
    Else
        Debug.Print "  -> No Parent Features"
    End If
    
    ' Passer à la fonction suivante
    Set swFeature = swFeature.GetNextFeature
Loop

End Sub

Bonjour,

Pour le message d’erreur c’est probablement lié à des variables vides par manque de contrôle sur le contenu de celles-ci dans la code.
Pour SkecthManager faut regarder le code de l’aide Get Sketch Entities Example (VBA) - 2021 - SOLIDWORKS API Help
Pour aider et tester faudrait un fichier correspondant à ce que vous voulez faire.

2 polubienia

0579794.SLDPRT (71,8 Ko)
Voila la pièce sur laquelle je fais mes test, je vais regarder l’exemple et essayer d’adapter a mon besoin.

Le but étant de pouvoir établir que la profondeur du tube, son épaisseur ,ses dimensions, et l’angle de découpe par rapport a un repère.