Je souhaiterais ajouter deux boutons macros dans mon gestionnaire de commande, leur fonction:
Après avoir sélectionné une vue dans ma mise en plan, je clique sur l'un des boutons qui me ferait une rotation horaire ou anti-horaire de 90° de la vue active.
J'ai bien essayé de récupérer le code de rotation d'une vue mais évidemment, cela ne marche que pour la vue avec laquelle j'ai fait l'enregistrement.
J'essaie de modifier ce code pour qu'il effectue une rotation sur la vue sélectionnée mais sans succés :
Sub main()
Set swApp = _ Application.SldWorks
Set Part = swApp.ActiveDoc boolstatus = Part.ActivateView("Vue de mise en plan5") boolstatus = Part.Extension.SelectByID2("Vue de mise en plan5", "DRAWINGVIEW", 8.32576033453152E-02, 0.228631445783132, 0, False, 0, Nothing, 0) boolstatus = Part.Extension.SelectByID2("Vue de mise en plan5", "DRAWINGVIEW", 0, 0, 0, False, 0, Nothing, 0) boolstatus = Part.DrawingViewRotate(1.5707963267949) End Sub
Si quelqu'un avait une piste je serais preneur je n'ai rien réussi à trouver sur le net ou le forum.
Dim Part As Object Dim boolstatus As Boolean Dim longstatus As Long, longwarnings As Long
Sub RotateLeft()
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc Part.ViewRotateminusy Part.ViewRotateminusy Part.ViewRotateminusy Part.ViewRotateminusy Part.ViewRotateminusy Part.ViewRotateminusy End Sub Sub RotateRight()
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc Part.ViewRotateplusy Part.ViewRotateplusy Part.ViewRotateplusy Part.ViewRotateplusy Part.ViewRotateplusy Part.ViewRotateplusy End Sub
J'ai testé les deux codes, le premier fonctionne bien. A ceci près qu'à partir de la position 0° de la vue, il lui dit de se mettre à 90°. C'est déjà pas mal, si il y avait un moyen d'incrémenter de 90° la position de la vue à chaque fois que l'on clique sur le bouton ce serait encore mieux.
Le deuxième code a l'air d'être écrit dans cet esprit, incrémenter de 90° la vue à chaque clic mais il ne se passe rien du tout lorsque je l'éxecute.
On est pas loin du but je cherche encore si vous avez des piste n'hésitez pas.
Je suis pas un expert en lagage VBA, il me faudrait quelque chose qui dans le premier code fasse ça:
Tu peux insérer la fonction "RestoreRotation()" avant de pivoter ta vue comme ça si elle est déjà pivotée, cela permet de la repositionner en position initiale avant de la re-pivoter suivant la valeur voulue.
En C#, ça donne :
ModelDoc2 swModel = default(ModelDoc2); ModelDocExtension swModelDocExt = default(ModelDocExtension); DrawingDoc swDrawing = default(DrawingDoc); bool status = false; int errors = 0; int warnings = 0;
Ci dessous, le code d'une macro qui permet de faire pivoter une vue nomée dans la feuille active de 45° :
Dim swApp As SldWorks.SldWorks Dim swDoc As ModelDoc2 Dim swDraw As DrawingDoc Dim swSheet As Sheet Dim swView As View Dim Angle As Double Dim swViewList As Variant Dim viewName As String
Sub main()
Set swApp = Application.SldWorks Set swDoc = swApp.ActiveDoc If swDoc.GetType = swDocumentTypes_e.swDocDRAWING Then
'Changer ici le nom de la vue à faire pivoter viewName = "Vue de mise en plan1"
Set swDraw = swDoc Set swSheet = swDraw.GetCurrentSheet swViewList = swSheet.GetViews Dim vView As Variant For Each vView In swViewList Set swView = vView If swView.Name = viewName Then swDraw.ActivateView (viewName) Angle = swView.Angle swView.Angle = Angle + (45 / 57.3)
En plus court et en supprimant ce qui ne sert à rien :
Dim swApp As SldWorks.SldWorks Dim swDoc As ModelDoc2 Dim swDraw As DrawingDoc Dim swView As View Dim viewName As String
Sub main() 'Changer ici le nom de la vue à faire pivoter viewName = "Vue de mise en plan1"
Set swApp = Application.SldWorks Set swDoc = swApp.ActiveDoc If swDoc.GetType = swDocumentTypes_e.swDocDRAWING Then Set swDraw = swDoc Set swView = swDraw.GetFirstView While Not swView Is Nothing If swView.Name = viewName Then swView.Angle = swView.Angle + (45 / 57.3) End If Set swView = swView.GetNextView Wend End If swDraw.ForceRebuild End Sub
Une dernière petite chose et je pourrais poster la macro finale, est-il possible d'appliquer la macro à la vue sélectionnée? J'ai bien essayé avec des choses comme viewName = swapp.ActiveView ou encore viewName = Activeview.GetName mais ça ne fonctionne pas.
Pour résumer A la ligne :
'Changer ici le nom de la vue à faire pivoter viewName = "Vue de mise en plan1"
Il faudrait que je remplace "vue de mise en plan1" par "vue sélectionnée"
J'arrive bricoler quelques macros en VBA mais je n'en fais pas souvent c'est difficile de rester à niveau.
la fonction SelectByIDX() ne renvoie pas de valeur.
Il faut passer par un objet SelectionManager pour récupérer les sélection. Puis, il faut vérifier que l'objet sélectionné est bien de type View. A partir de là, le code que je vous ai fourni reste inchangé.
Pour vous aider, cherchez "Get selected object Solidworks api" dans Google.
Le code de la macro modifié pour faire pivoter la sélection.
Dim swApp As SldWorks.SldWorks Dim swDoc As ModelDoc2 Dim swDraw As DrawingDoc Dim swView As View Dim viewName As String Dim swSelMgr As SelectionMgr Sub main()
Set swApp = Application.SldWorks Set swDoc = swApp.ActiveDoc If swDoc.GetType = swDocumentTypes_e.swDocDRAWING Then Set swDraw = swDoc Set swSelMgr = swDoc.SelectionManager Set swView = swSelMgr.GetSelectedObject5(1) While Not swView Is Nothing If swView.Name = viewName Then swView.Angle = swView.Angle + (45 / 57.3) End If Set swView = swView.GetNextView Wend End If swDraw.ForceRebuild End Sub
Attention, je n'ai pas blindé le code, il faut ajouter la gestion des erreurs.
Merci beaucoup de votre réponse, désolé de ne pas avoir pu y répondre avant.
J'ai testé la macro que vous m'avez déposé dans le précédent message malheureusement elle ne fonctionne pas, je ne trouve pas pourquoi. Même après reconstruction la vue ne change pas de position.
Je continue à chercher de mon coté. La macro fonctionne-t-elle chez vous?
voila le code pour incrémenter la vue sélectionné. Par contre il faut à chaque fois re sélectionner la vue.
Dim swApp As SldWorks.SldWorks Dim swDoc As ModelDoc2 Dim swDraw As DrawingDoc Dim swView As View Dim swSelMgr As SelectionMgr
Sub main()
Set swApp = Application.SldWorks Set swDoc = swApp.ActiveDoc
If swDoc.GetType = swDocumentTypes_e.swDocDRAWING Then Set swDraw = swDoc Set swSelMgr = swDoc.SelectionManager Set swView = swSelMgr.GetSelectedObject5(1) swView.Angle = swView.Angle + (45 * 3.14159265358979 / 180) End If