Makro-Rotationsansicht 90°

Hallo

Ich möchte zwei Makro-Schaltflächen in meinem Befehlsmanager hinzufügen, deren Funktion: 

Nachdem ich eine Ansicht in meiner Zeichnung ausgewählt habe, klicke ich auf eine der Schaltflächen, die die aktive Ansicht um 90° im Uhrzeigersinn oder gegen den Uhrzeigersinn drehen würde. 

 

Ich habe versucht, den Rotationscode einer Ansicht abzurufen, aber offensichtlich funktioniert es nur für die Ansicht, mit der ich die Aufnahme gemacht habe. 

Ich versuche, diesen Code so zu ändern, dass er sich in der ausgewählten Ansicht dreht, aber ohne Erfolg:

Sub main()

swApp = _ setzen
Anwendung.SldWorks

Set Part = swApp.ActiveDoc
boolstatus = Part.ActivateView("Layoutansicht5")
boolstatus = Part.Extension.SelectByID2("Zeichnungsansicht5", "ZEICHNUNGSANSICHT", 8.32576033453152E-02, 0.228631445783132, 0, Falsch, 0, Nichts, 0)
boolstatus = Part.Extension.SelectByID2("Zeichnungsansicht5", "DRAWINGVIEW", 0, 0, 0, Falsch, 0, Nichts, 0)
boolstatus = Teil.DrawingViewRotate(1.5707963267949)
Ende Sub

 

Wenn jemand einen Hinweis hätte, wäre ich interessiert, ich habe es nicht geschafft, etwas im Netz oder im Forum zu finden. 

 

Herzliche Grüße.

Probieren Sie es einfach aus

Sub main()

Legen Sie swApp = Application.SldWorks fest

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

Oder besser gesagt das

Dimmen swApp als Objekt

Teil als Objekt dimmen
Dim boolstatus als boolescher Wert
Dim longstatus As Long, longwarnings As Long

Sub RotateLeft()

Legen Sie swApp = Application.SldWorks fest

Set Part = swApp.ActiveDoc
Part.ViewRotateminusy
Part.ViewRotateminusy
Part.ViewRotateminusy
Part.ViewRotateminusy
Part.ViewRotateminusy
Part.ViewRotateminusy
Ende Sub
Sub RotateRight()

Legen Sie swApp = Application.SldWorks fest

Set Part = swApp.ActiveDoc
Part.ViewRotateplusy
Part.ViewRotateplusy
Part.ViewRotateplusy
Part.ViewRotateplusy
Part.ViewRotateplusy
Part.ViewRotateplusy
Ende Sub

Hallo 

 

Zunächst einmal vielen Dank für die Antworten, MaD:

 

Ich habe beide Codes getestet, der erste funktioniert gut. Nur dass er ihm von der 0°-Position des Blicks aus sagt, er solle sich auf 90° stellen. Das ist schon nicht schlecht, wenn es eine Möglichkeit gäbe, die Position der Ansicht jedes Mal um 90° zu erhöhen, wenn Sie auf die Schaltfläche klicken, wäre es noch besser. 

Der zweite Code scheint mit diesem Gedanken im Hinterkopf geschrieben worden zu sein, erhöht die Ansicht mit jedem Klick um 90°, aber beim Ausführen passiert überhaupt nichts.

Wir sind nicht mehr weit vom Ziel entfernt, ich bin immer noch auf der Suche, ob Sie Hinweise haben, zögern Sie nicht. 

Ich bin kein Experte für VBA-Verzögerungen, ich bräuchte etwas, das im ersten Code dies tut:

boolstatus = Teil.DrawingViewRotate(+90°)

Ich finde die Struktur nicht ausreichend. 

Vielen Dank

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

Sie finden die Zeile unten

status = swDrawing. DrawingViewRotate(45 / 57.3) 'Grad in Bogenmaß umwandeln, die Standard-Systemeinheit

Vielen Dank für Ihre Antwort, MaD, es funktioniert, aber es bringt die Ansicht in die Position, in der sie angezeigt wird. 

In diesem Fall  platziert "status = swDrawing.DrawingViewRotate(45 / 57.3" die Ansicht in einem Winkel von 45° von der Startposition. 

Wenn Sie erneut klicken, ist die Ansicht bereits bei 45°, also bewegen Sie sich nicht. 

Wenn möglich, möchte ich bei jedem Klick um 45° inkrementieren, also ihm die aktuelle Position + 45° mitteilen.

Ich weiß nicht, ob ich klar bin?

 Vielen Dank im Voraus

Hallo

Sie können die Funktion "RestoreRotation()" einfügen, bevor Sie Ihre Ansicht auf diese Weise drehen, wenn sie bereits gedreht ist, sodass Sie sie in der ursprünglichen Position neu positionieren können, bevor Sie sie wieder auf den gewünschten Wert drehen.

In C# sieht es wie folgt aus:

ModelDoc2 swModel = Standard(ModelDoc2);
ModelDocExtension swModelDocExt = Standard(ModelDocExtension);
DrawingDoc swDrawing = Standard(DrawingDoc);
bool status = falsch;
int-Fehler = 0;
int Warnungen = 0;

swModel = (ModelDoc2)Programm.swapp. OpenDoc6("C:\\Programme\\SolidWorks Corp\\SolidWorks\\samples\\tutorial\\driveworksxpress\\mobile gantry.slddrw", (int)swDocumentTypes_e.swDocDRAWING, (int)swOpenDocOptions_e. swOpenDocOptions_Silent, "", ref-Fehler , ref-Warnungen );
swModelDocExt = (ModelDocExtension)swModel.Extension;
swModel. AnsichtZoomzufit2();
swDrawing = (DrawingDoc)swModel;
           
status = swDrawing. ActivateView("Zeichnungsansicht4");
status = swModelDocExt. SelectByID2("Drawing View4", "DRAWINGVIEW", 0, 0, 0, false, 0, null, 0);
swDrawing. RestoreRotation();
           
status = swDrawing. ActivateView("Zeichnungsansicht4");
status = swModelDocExt. SelectByID2("Drawing View4", "DRAWINGVIEW", 0, 0, 0, false, 0, null, 0);
status = swDrawing. DrawingViewRotate(30 / 57.3);

Herzliche Grüße

Guten Abend

Im Folgenden finden Sie den Code für ein Makro, mit dem Sie eine benannte Ansicht im aktiven Blatt um 45° drehen können:

Dim swApp als SldWorks.SldWorks
Dim swDoc als ModelDoc2
Dim swDraw As DrawingDoc
Dim swSheet als Blatt
Dim swView As View
Dimmwinkel als doppelt
Dim swViewList als Variante
Dim viewName als Zeichenfolge

Sub main()

Legen Sie swApp = Application.SldWorks fest
Festlegen von swDoc = swApp.ActiveDoc
Wenn swDoc.GetType = swDocumentTypes_e.swDocDRAWING dann

    'Ändern Sie hier den Namen der zu drehenden Ansicht
    viewName = "Zeichnungsansicht1"

    Festlegen von swDraw = swDoc
    Legen Sie swSheet = swDraw.GetCurrentSheet fest
    swViewList = swSheet.GetViews
    Dim vView als Variante
    Für jeden vView in swViewList
        Festlegen von swView = vView
        Wenn swView.Name = viewName Dann
            swDraw.ActivateView (viewName)
            Winkel = swView.Winkel
            swView.Angle = Winkel + (45 / 57.3)
            
        Ende, wenn
    Nächster
Ende, wenn
swDraw.ForceRebuild
Ende Sub

Herzliche Grüße.

Kurz gesagt, und indem man das Unbrauchbare entfernt:

Dim swApp als SldWorks.SldWorks
Dim swDoc als ModelDoc2
Dim swDraw As DrawingDoc
Dim swView As View
Dim viewName als Zeichenfolge

Sub main()
'Ändern Sie hier den Namen der zu drehenden Ansicht
viewName = "Zeichnungsansicht1"

Legen Sie swApp = Application.SldWorks fest
Festlegen von swDoc = swApp.ActiveDoc
Wenn swDoc.GetType = swDocumentTypes_e.swDocDRAWING dann
    Festlegen von swDraw = swDoc
    Legen Sie swView = swDraw.GetFirstView fest
    Auch wenn es nicht swView ist, ist nichts
        Wenn swView.Name = viewName Dann
            swView.Angle = swView.Angle + (45 / 57.3)
        Ende, wenn
        Legen Sie swView = swView.GetNextView fest
    Wend
Ende, wenn
swDraw.ForceRebuild
Ende Sub

Guter :) Code

1 „Gefällt mir“

Hallo 

Es ist perfekt, dieser letzte Code funktioniert!!!  

Eine letzte Kleinigkeit, und ich könnte das endgültige Makro posten, ist es möglich, das Makro auf die ausgewählte Ansicht anzuwenden? Ich habe es mit Dingen wie viewName = swapp versucht. ActiveView oder viewName = Activeview.GetName, aber es funktioniert nicht. 

 

Zusammenfassend Auf der Linie: 

'Ändern Sie hier den Namen der zu drehenden Ansicht
viewName = "Zeichnungsansicht1"

Ich müsste "Zeichnungsansicht1" durch "ausgewählte Ansicht"  ersetzen

Ich schaffe es, an ein paar Makros in VBA herumzubasteln, aber ich mache sie nicht oft, es ist schwierig, Schritt zu halten. 

Eine letzte helfende Hand wäre willkommen. 

 

Vielen Dank im Voraus.  

Herzliche Grüße.

Hallo

Verwenden Sie die Funktion SlectById2 zusätzlich zur Aktivansicht, theoretisch sollte es funktionieren.

Hallo

Die Funktion SelectByIDX() gibt keinen Wert zurück.

Sie müssen ein SelectionManager-Objekt durchlaufen, um die Auswahl abzurufen. Dann müssen Sie überprüfen, ob das ausgewählte Objekt tatsächlich vom Typ Ansicht ist. Von dort aus bleibt der Code, den ich Ihnen zur Verfügung gestellt habe, unverändert.

Um Ihnen zu helfen, suchen Sie in Google nach "Get selected object Solidworks api".

Guten Abend

Der Makrocode, der geändert wurde, um die Auswahl zu drehen.

Dim swApp als SldWorks.SldWorks
Dim swDoc als ModelDoc2
Dim swDraw As DrawingDoc
Dim swView As View
Dim viewName als Zeichenfolge
Sun swSelMgr als AuswahlMgr
Sub main()

Legen Sie swApp = Application.SldWorks fest
Festlegen von swDoc = swApp.ActiveDoc
Wenn swDoc.GetType = swDocumentTypes_e.swDocDRAWING dann
    Festlegen von swDraw = swDoc
    Festlegen von swSelMgr = swDoc.SelectionManager
    Set swView = swSelMgr.GetSelectedObject5(1)
    Auch wenn es nicht swView ist, ist nichts
        Wenn swView.Name = viewName Dann
            swView.Angle = swView.Angle + (45 / 57.3)
        Ende, wenn
        Legen Sie swView = swView.GetNextView fest
    Wend
Ende, wenn
swDraw.ForceRebuild
Ende Sub

Seien Sie vorsichtig, ich habe den Code nicht abgeschirmt, Sie müssen eine Fehlerbehandlung hinzufügen.

Hallo 

 

Vielen Dank für Ihre Antwort, tut mir leid, dass ich sie vorher nicht beantworten konnte. 

 

Ich habe das Makro getestet, das Sie mir in der vorherigen Nachricht fallen gelassen haben, leider funktioniert es nicht, ich kann nicht finden, warum. Auch nach der Rekonstruktion verändert sich die Position des Sehvermögens nicht. 

 

Ich schaue weiterhin auf eigene Faust. Funktioniert Makro für Sie? 

 

Aufrichtig

Falls nötig, das Makro, das ich verwende (eine links und eine rechts).

Vielen Dank an alle für die Hilfe


90right.swp (englisch)

Hallo

Danke, aber es erhöht den Winkel nicht, wie in einem der Beiträge gewünscht?

Herzliche Grüße

Hallo

Hier ist der Code zum Inkrementieren der ausgewählten Ansicht. Auf der anderen Seite müssen Sie die Ansicht jedes Mal neu auswählen.

Dim swApp als SldWorks.SldWorks
Dim swDoc als ModelDoc2
Dim swDraw As DrawingDoc
Dim swView As View
Sun swSelMgr als AuswahlMgr

Sub main()

Legen Sie swApp = Application.SldWorks fest
Festlegen von swDoc = swApp.ActiveDoc

Wenn swDoc.GetType = swDocumentTypes_e.swDocDRAWING dann
    Festlegen von swDraw = swDoc
    Festlegen von swSelMgr = swDoc.SelectionManager
    Set swView = swSelMgr.GetSelectedObject5(1)
    swView.Angle = swView.Angle + (45 * 3.14159265358979 / 180)
Ende, wenn

'swDraw.ForceRebuild

Ende Sub