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:
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
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:
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;
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
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
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ć.
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".
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.
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?
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