Bonjour,
Je souhaiterais récupérer le nom de la 1ère esquisse dans l'état déplié afin de le montrer ou le cacher suivant besoin. (ici Ligne de pliage2 mais le nom n'est pas toujours le même.)
Voici le code trouvé et fonctionnel mais quand on connaît le nom de l'esquisse:
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
Bonjour.
On peut parcourir l'arbre de construction par avec les méthodes:
Features (FirstFeature et GetNextFeature)
SubFeature (GetFirstSubFeature et GetNextSubFeature)
on teste le type par GetTypeName2
Par contre je pense qu'il faut d'abord récupérer le fichier qui est attaché a la vue, ouvrir le fichier et parcourir son arborescence, car on a que 2 niveaux (Feature et subFeature).
Mais je n'ai jamais testé sur un état déplié. Il faut peut être activer l'état déplié
Cordialement.
1 « J'aime »
Bonjour. Essaye ca:
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 « J'aime »
Bonjour,
La réponse est bonne JeromeP mais pas la question désolé.
Pour reformuler il s'agit de faire cette macro depuis une MEP. Sinon c'est parfaitement fonctionnel.
J'ai essayé quelque chose comme ça mais il manque quelques chose.
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
Le code est un peu différent pour un dessin
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
Note: Répéter la macro ne changera pas la visibilité du sketch de l'un a l'autre état comme la macro précédente. Mais ca répond à la question originale.
1 « J'aime »
Bonjour,
Effectivement c'est pas mal différent, je regarde ça dans l'après midi si j'ai un peu de temps. Merci.
Parfaitement fonctionnel, merci JeromeP .
Maintenant il me reste plus qu'à l'adapter dans ma macro complète mais ça ne sera pas très compliqué.