Macro rotation vue 90°

Bonjour,

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. 

 

Cordialement.

Essai juste avec

Sub main()

Set swApp = Application.SldWorks

Set Part = swApp.ActiveDoc
boolstatus = Part.DrawingViewRotate(1.5707963267949)
End Sub

Ou ceci plutot

Dim swApp As Object

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

Bonjour, 

 

Tout d'abord merci beaoucp pour les réponses MaD:

 

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:

boolstatus = Part.DrawingViewRotate(+90°)

Je ne trouve pas la strucutre adéquate. 

Merci

http://help.solidworks.com/2013/English/api/sldworksapi/Rotate_Drawing_View_45_Degrees_Example_VB.htm

tu trouve la ligne ci dessous

status = swDrawing.DrawingViewRotate(45 / 57.3) 'Convert degrees to radians, the default system unit

Merci pour ta réponse MaD, ça fonctionne en effet, mais ça place la vue dans la position qu'on lui indique. 

En l'occurence  "status = swDrawing.DrawingViewRotate(45 / 57.3" place la vue à 45° par rapport à sa postion de départ. 

Si on clique de nouveau, la vue est déjà à 45° donc ne bouge pas. 

J'aimerais si c'est possible incrémenter de 45 ° à chaque clic, c'est à dire lui dire position actuelle + 45°.

Je ne sais pas si je suis clair?

D'avance merci 

Bonjour,

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;

swModel = (ModelDoc2)Program.swapp.OpenDoc6("C:\\Program Files\\SolidWorks Corp\\SolidWorks\\samples\\tutorial\\driveworksxpress\\mobile gantry.slddrw", (int)swDocumentTypes_e.swDocDRAWING, (int)swOpenDocOptions_e.swOpenDocOptions_Silent, "", ref errors, ref warnings);
swModelDocExt = (ModelDocExtension)swModel.Extension;
swModel.ViewZoomtofit2();
swDrawing = (DrawingDoc)swModel;
           
status = swDrawing.ActivateView("Drawing View4");
status = swModelDocExt.SelectByID2("Drawing View4", "DRAWINGVIEW", 0, 0, 0, false, 0, null, 0);
swDrawing.RestoreRotation();
           
status = swDrawing.ActivateView("Drawing View4");
status = swModelDocExt.SelectByID2("Drawing View4", "DRAWINGVIEW", 0, 0, 0, false, 0, null, 0);
status = swDrawing.DrawingViewRotate(30 / 57.3);

Cordialement,

Bonsoir,

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)
            
        End If
    Next
End If
swDraw.ForceRebuild
End Sub

Cordialement.

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

Bon code :)

1 « J'aime »

Bonjour, 

C'est parfait ce dernier code fonctionne!!!!! 

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. 

Un dernier coup de main serait le bienvenue. 

 

Merci d'avance.  

Cordialement.

Bonjour,

Utilise la fonction SlectById2 en complément de activeview en toute théorie ça devrait fonctionner.

Bonjour,

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.

Bonsoir,

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.

Bonjour, 

 

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? 

 

Bien cordialement

Si besoin la macro que j'utilise (une gauche et un droite).

Merci à tous pour l'aide


90droite.swp

Bonjour,

Merci mais elle n'incrémente pas l'angle comme demandé dans un des posts ?

Cordialement,

salut,

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

'swDraw.ForceRebuild

End Sub