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