Widok obrotu makro o 90°

Witam

Chciałbym dodać dwa przyciski makr w moim menedżerze poleceń, ich funkcję: 

Po wybraniu widoku na moim rysunku klikam jeden z przycisków, który obróci aktywny widok o 90° zgodnie z ruchem wskazówek zegara lub przeciwnie do ruchu wskazówek zegara. 

 

Próbowałem pobrać kod obrotu widoku, ale oczywiście działa to tylko dla widoku, za pomocą którego dokonałem nagrania. 

Próbuję zmodyfikować ten kod tak, aby obracał się na wybranym widoku, ale bez powodzenia:

Sub main()

Ustaw swApp = _
Aplikacja.SldWorks

Ustaw część = swApp.ActiveDoc
boolstatus = Part.ActivateView("Widok układu5")
boolstatus = Part.Extension.SelectByID2("Widok rysunku5", "DRAWINGVIEW", 8.32576033453152E-02, 0.228631445783132, 0, Fałsz, 0, Nic, 0)
boolstatus = Part.Extension.SelectByID2("Widok rysunku5", "DRAWINGVIEW", 0, 0, 0, Fałsz, 0, Nic, 0)
boolstatus = Part.DrawingViewRotate(1.5707963267949)
Koniec subwoofera

 

Gdyby ktoś miał jakiś trop to byłbym zainteresowany, nie udało mi się nic znaleźć w necie ani na forum. 

 

Pozdrowienia.

Po prostu spróbuj z

Sub main()

Ustaw swApp = Application.SldWorks

Ustaw część = swApp.ActiveDoc
boolstatus = Part.DrawingViewRotate(1.5707963267949)
Koniec subwoofera

A raczej to

Dim swApp As Object

Przyciemnij część jako obiekt
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Sub RotateLeft()

Ustaw swApp = Application.SldWorks

Ustaw część = swApp.ActiveDoc
Part.ViewRotateminusy
Part.ViewRotateminusy
Part.ViewRotateminusy
Part.ViewRotateminusy
Part.ViewRotateminusy
Part.ViewRotateminusy
Koniec subwoofera
Sub RotateRight()

Ustaw swApp = Application.SldWorks

Ustaw część = swApp.ActiveDoc
Part.ViewRotateplusy
Part.ViewRotateplusy
Part.ViewRotateplusy
Part.ViewRotateplusy
Part.ViewRotateplusy
Part.ViewRotateplusy
Koniec subwoofera

Witam 

 

Przede wszystkim dziękuję za odpowiedzi MaD:

 

Przetestowałem oba kody, pierwszy działa dobrze. Tyle tylko, że z pozycji 0° widoku każe mu ustawić się pod kątem 90°. To już nie jest źle, gdyby istniał sposób na zwiększanie pozycji widoku o 90° za każdym razem, gdy klikniesz przycisk, byłoby jeszcze lepiej. 

Drugi kod wydaje się być napisany z myślą o tym, zwiększaj widok o 90° przy każdym kliknięciu, ale nic się nie dzieje, gdy go uruchamiam.

Nie jesteśmy daleko od celu, wciąż szukam, czy masz jakieś tropy, nie wahaj się. 

Nie jestem ekspertem od opóźnień VBA, potrzebowałbym czegoś, co w pierwszym kodzie robi to:

boolstatus = Part.DrawingViewRotate(+90°)

Nie uważam, aby struktura była odpowiednia. 

Dziękuję

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

Znajdziesz linię poniżej

status = swDrawing. DrawingViewRotate(45 / 57.3) 'Zamień stopnie na radiany, domyślną jednostkę systemową

Dziękuję za odpowiedź MaD, to działa, ale ustawia widok w pozycji, we wskazanej pozycji. 

W tym przypadku  "status = swDrawing.DrawingViewRotate(45 / 57.3" umieszcza widok pod kątem 45° od jego pozycji początkowej. 

Jeśli klikniesz ponownie, widok jest już ustawiony pod kątem 45°, więc nie ruszaj się. 

Jeśli to możliwe, chciałbym zwiększać o 45 ° przy każdym kliknięciu, tj. podać aktualną pozycję + 45 °.

Nie wiem, czy mam jasność?

 Z góry dziękuję

Witam

Możesz wstawić funkcję "RestoreRotation()" przed obróceniem widoku w ten sposób, jeśli jest on już obrócony, co pozwala na zmianę jego położenia w pozycji początkowej przed ponownym obróceniem go do żądanej wartości.

W języku C# wygląda to następująco:

ModelDoc2 swModel = default(ModelDoc2);
ModelDocExtension swModelDocExt = default(ModelDocExtension);
DrawingDoc swDrawing = domyślnie(DrawingDoc);
Wartość logiczna = Fałsz;
błędy int = 0;
int ostrzeżenia = 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, "", błędy ref , ostrzeżenia ref );
swModelDocExt = (RozszerzenieModelu)swModel.Extension;
swModel. ViewZoomtofit2();
swDrawing = (DrawingDoc)swModel;
           
status = swDrawing. ActivateView("Widok rysunku4");
status = swModelDocExt. SelectByID2("Widok rysunku4", "DRAWINGVIEW", 0, 0, 0, false, 0, null, 0);
swRysunek. RestoreRotation();
           
status = swDrawing. ActivateView("Widok rysunku4");
status = swModelDocExt. SelectByID2("Widok rysunku4", "DRAWINGVIEW", 0, 0, 0, false, 0, null, 0);
status = swDrawing. RysunekWidokObróć(30 / 57,3);

Pozdrowienia

Dobry wieczór

Poniżej znajduje się kod makra, który umożliwia obrócenie nazwanego widoku w aktywnym arkuszu o 45°:

Dim swApp jako SldWorks.SldWorks
Dim swDoc As ModelDoc2
Przyciemnij swDraw jako DrawingDoc
Przyciemnij arkusz swSheet jako arkusz
Przyciemnij swView jako Widok
Kąt przyciemnienia jako podwójny
Dim swViewList As Variant
Przyciemnij nazwę widoku jako ciąg

Sub main()

Ustaw swApp = Application.SldWorks
Ustaw swDoc = swApp.ActiveDoc
Jeśli swDoc.GetType = swDocumentTypes_e.swDocDRAWING Następnie

    'Zmień tutaj nazwę widoku, który ma zostać obrócony
    viewName = "Widok rysunku1"

    Ustaw swDraw = swDoc
    Ustaw swSheet = swDraw.GetCurrentSheet
    swViewList = swSheet.GetViews
    Przyciemnij vView jako wariant
    Dla każdego vView w swViewList
        Ustaw swView = vView
        Jeśli swView.Name = viewName to
            swDraw.ActivateView (nazwa_widoku)
            Kąt = swView.Kąt
            swView.Angle = Kąt + (45 / 57,3)
            
        Zakończ jeżeli:
    Następny
Zakończ jeżeli:
swDraw.ForceRebuild
Koniec subwoofera

Pozdrowienia.

Krótko mówiąc, usuwając to, co bezużyteczne:

Dim swApp jako SldWorks.SldWorks
Dim swDoc As ModelDoc2
Przyciemnij swDraw jako DrawingDoc
Przyciemnij swView jako Widok
Przyciemnij nazwę widoku jako ciąg

Sub main()
'Zmień tutaj nazwę widoku, który ma zostać obrócony
viewName = "Widok rysunku1"

Ustaw swApp = Application.SldWorks
Ustaw swDoc = swApp.ActiveDoc
Jeśli swDoc.GetType = swDocumentTypes_e.swDocDRAWING Następnie
    Ustaw swDraw = swDoc
    Ustaw swView = swDraw.GetFirstView
    Póki nie swView to nic
        Jeśli swView.Name = viewName to
            swView.Angle = swView.Angle + (45 / 57,3)
        Zakończ jeżeli:
        Ustaw swView = swView.GetNextView
    Wend
Zakończ jeżeli:
swDraw.ForceRebuild
Koniec subwoofera

Dobry kod :)

1 polubienie

Witam 

Jest idealny, ten ostatni kod działa!!!  

Ostatnia drobna rzecz i mógłbym opublikować końcowe makro, czy można zastosować makro do wybranego widoku? Próbowałem z takimi rzeczami jak viewName = swapp. ActiveView lub viewName = Activeview.GetName, ale to nie działa. 

 

Podsumowując Na linii: 

'Zmień tutaj nazwę widoku, który ma zostać obrócony
viewName = "Widok rysunku1"

Musiałbym zamienić "widok rysunku1" na "wybrany widok"  

Udaje mi się majstrować przy kilku makrach w VBA, ale nie robię tego często, trudno za nimi nadążyć. 

Ostatnia pomocna dłoń byłaby mile widziana. 

 

Z góry dziękuję.  

Pozdrowienia.

Witam

Użyj funkcji SlectById2 oprócz activeview, teoretycznie powinna działać.

Witam

Funkcja SelectByIDX() nie zwraca wartości.

Aby pobrać zaznaczenia, należy przejść przez obiekt SelectionManager. Następnie należy sprawdzić, czy wybrany obiekt jest rzeczywiście typu Widok. Od tego momentu kod, który Ci dostarczyłem, pozostaje niezmieniony.

Aby Ci pomóc, wyszukaj w Google "Pobierz wybrany obiekt Solidworks api".

Dobry wieczór

Kod makra został zmodyfikowany w celu obrócenia zaznaczenia.

Dim swApp jako SldWorks.SldWorks
Dim swDoc As ModelDoc2
Przyciemnij swDraw jako DrawingDoc
Przyciemnij swView jako Widok
Przyciemnij nazwę widoku jako ciąg
Sun swSelMgr jako SelectionMgr
Sub main()

Ustaw swApp = Application.SldWorks
Ustaw swDoc = swApp.ActiveDoc
Jeśli swDoc.GetType = swDocumentTypes_e.swDocDRAWING Następnie
    Ustaw swDraw = swDoc
    Ustaw swSelMgr = swDoc.SelectionManager
    Ustaw swView = swSelMgr.GetSelectedObject5(1)
    Póki nie swView to nic
        Jeśli swView.Name = viewName to
            swView.Angle = swView.Angle + (45 / 57,3)
        Zakończ jeżeli:
        Ustaw swView = swView.GetNextView
    Wend
Zakończ jeżeli:
swDraw.ForceRebuild
Koniec subwoofera

Bądź ostrożny, nie osłoniłem kodu, musisz dodać obsługę błędów.

Witam 

 

Bardzo dziękuję za odpowiedź, przepraszam, że nie mogłem odpowiedzieć wcześniej. 

 

Przetestowałem makro, które upuściłeś mi w poprzedniej wiadomości, niestety nie działa, nie mogę znaleźć dlaczego. Nawet po rekonstrukcji wzrok nie zmienia pozycji. 

 

Nadal szukam na własną rękę. Czy makro działa dla Ciebie? 

 

Szczerze

W razie potrzeby używam makra (po lewej i po prawej).

Dziękuję wszystkim za pomoc


90right.swp powiedział:

Witam

Dziękuję, ale nie zwiększa kąta, jak żądano w jednym z postów?

Pozdrowienia

Witam

Oto kod do inkrementacji wybranego widoku. Z drugiej strony za każdym razem musisz ponownie wybrać widok.

Dim swApp jako SldWorks.SldWorks
Dim swDoc As ModelDoc2
Przyciemnij swDraw jako DrawingDoc
Przyciemnij swView jako Widok
Sun swSelMgr jako SelectionMgr

Sub main()

Ustaw swApp = Application.SldWorks
Ustaw swDoc = swApp.ActiveDoc

Jeśli swDoc.GetType = swDocumentTypes_e.swDocDRAWING Następnie
    Ustaw swDraw = swDoc
    Ustaw swSelMgr = swDoc.SelectionManager
    Ustaw swView = swSelMgr.GetSelectedObject5(1)
    swView.Angle = swView.Angle + (45 * 3.14159265358979 / 180)
Zakończ jeżeli:

'swDraw.ForceRebuild

Koniec subwoofera