Macro rotatie weergave 90°

Hallo

Ik wil graag twee macroknoppen toevoegen in mijn command manager, hun functie: 

Nadat ik een weergave in mijn tekening heb geselecteerd, klik ik op een van de knoppen die de actieve weergave 90° met de klok mee of tegen de klok in zou draaien. 

 

Ik heb geprobeerd de rotatiecode van een weergave op te halen, maar het werkt natuurlijk alleen voor de weergave waarmee ik de opname heb gemaakt. 

Ik probeer deze code zo aan te passen dat deze draait op de geselecteerde weergave, maar zonder succes:

Sub hoofd()

Stel swApp in = _
Toepassing.SldWorks

Deel instellen = swApp.ActiveDoc
boolstatus = Part.ActivateView("Lay-out View5")
boolstatus = Part.Extension.SelectByID2("Tekening5", "TEKENING", 8.32576033453152E-02, 0.228631445783132, 0, Onwaar, 0, Niets, 0)
boolstatus = Part.Extension.SelectByID2("Tekening5", "TEKENING", 0, 0, 0, Onwaar, 0, Niets, 0)
boolstatus = Deel.TekeningViewRotate(1.5707963267949)
Einde Sub

 

Als iemand een voorsprong had, zou ik geïnteresseerd zijn, ik ben er niet in geslaagd om iets te vinden op het net of het forum. 

 

Vriendelijke groeten.

Probeer het gewoon met

Sub hoofd()

Stel swApp = Toepassing.SldWorks in

Deel instellen = swApp.ActiveDoc
boolstatus = Deel.TekeningViewRotate(1.5707963267949)
Einde Sub

Of beter gezegd dit

Dim swApp als object

Deel dimmen als object
Dim boolstatus als Booleaanse
Dim longstatus As Long, longwarnings As Long

Sub RotateLeft()

Stel swApp = Toepassing.SldWorks in

Deel instellen = swApp.ActiveDoc
Deel.WeergaveDraaienminusy
Deel.WeergaveDraaienminusy
Deel.WeergaveDraaienminusy
Deel.WeergaveDraaienminusy
Deel.WeergaveDraaienminusy
Deel.WeergaveDraaienminusy
Einde Sub
Sub RotateRight()

Stel swApp = Toepassing.SldWorks in

Deel instellen = swApp.ActiveDoc
Deel.WeergaveRotateplusy
Deel.WeergaveRotateplusy
Deel.WeergaveRotateplusy
Deel.WeergaveRotateplusy
Deel.WeergaveRotateplusy
Deel.WeergaveRotateplusy
Einde Sub

Hallo 

 

Allereerst bedankt voor de antwoorden MaD:

 

Ik heb beide codes getest, de eerste werkt goed. Behalve dat hij hem vanuit de 0°-positie van het uitzicht zegt dat hij zichzelf op 90° moet zetten. Dat is al niet slecht, als er een manier was om de positie van de weergave met 90° te verhogen elke keer dat je op de knop klikt, zou het nog beter zijn. 

De tweede code lijkt te zijn geschreven met dit in gedachten, verhoog de weergave met 90° bij elke klik, maar er gebeurt helemaal niets als ik het uitvoer.

We zijn niet ver van het doel, ik ben nog steeds aan het kijken of je aanknopingspunten hebt, aarzel niet. 

Ik ben geen expert op het gebied van VBA-vertraging, ik zou iets nodig hebben dat in de eerste code dit doet:

boolstatus = Deel.TekeningViewRotate(+90°)

Ik vind de structuur niet voldoende. 

Bedankt

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

Je vindt de regel hieronder

status = swTekening. DrawingViewRotate(45 / 57.3) 'Converteer graden naar radialen, de standaard systeemeenheid

Dank u voor uw antwoord MaD, het werkt wel, maar het zet de weergave in de positie waarin het is aangegeven. 

In dit geval  plaatst "status = swDrawing.DrawingViewRotate(45 / 57.3" de weergave op 45° vanaf de startpositie. 

Als u nogmaals klikt, is de weergave al op 45°, dus beweeg niet. 

Indien mogelijk zou ik bij elke klik met 45 ° willen verhogen, d.w.z. de huidige positie + 45 ° vertellen.

Ik weet niet of ik duidelijk ben?

 Bij voorbaat dank

Hallo

U kunt de functie "RestoreRotation()" invoegen voordat u uw weergave op deze manier roteert als deze al is geroteerd, hierdoor kunt u deze in de oorspronkelijke positie verplaatsen voordat u deze opnieuw roteert naar de gewenste waarde.

In C# ziet het er als volgt uit:

ModelDoc2 swModel = standaard(ModelDoc2);
ModelDocExtension swModelDocExt = standaard(ModelDocExtension);
DrawingDoc swDrawing = standaard(DrawingDoc);
Bool status = onwaar;
int fouten = 0;
int waarschuwingen = 0;

swModel = (ModelDoc2)Programma.swapp. OpenDoc6("C:\\Program Files\\SolidWorks Corp\\SolidWorks\\samples\\tutorial\\driveworksxpress\\mobile gantry.slddrw", (int)swDocumentTypes_e.swDocDRAWING, (int)swOpenDocOptions_e. swOpenDocOptions_Silent, "", ref-fouten , ref-waarschuwingen );
swModelDocExt = (ModelDocExtension)swModel.Extension;
swModel. ViewZoomtofit2();
swDrawing = (DrawingDoc)swModel;
           
status = swTekening. ActivateView ("Tekening View4");
status = swModelDocExt. SelectByID2(""Tekening4", "TEKENING", 0, 0, 0, onwaar, 0, null, 0);
swTekening. RestoreRotation();
           
status = swTekening. ActivateView ("Tekening View4");
status = swModelDocExt. SelectByID2(""Tekening4", "TEKENING", 0, 0, 0, onwaar, 0, null, 0);
status = swTekening. TekeningViewRotate(30 / 57.3);

Vriendelijke groeten

Goedenavond

Hieronder vindt u de code voor een macro waarmee u een benoemde weergave in het actieve blad met 45° kunt roteren:

Dim swApp als SldWorks.SldWorks
Dim swDoc als ModelDoc2
Dim swDraw als DrawingDoc
Dim swSheet als blad
Dim swView als weergave
Dimhoek als dubbel
Dim swViewList als variant
Dim viewName als tekenreeks

Sub hoofd()

Stel swApp = Toepassing.SldWorks in
Stel swDoc in = swApp.ActiveDoc
Als swDoc.GetType = swDocumentTypes_e.swDocDRAWING Dan

    'Wijzig de naam van de weergave die hier moet worden gedraaid
    viewName = "Tekening View1"

    Stel swDraw = swDoc in
    Stel swSheet in = swDraw.GetCurrentSheet
    swViewList = swSheet.GetViews
    Dim vView als variant
    Voor elke vView in swViewList
        Stel swView = vView in
        Als swView.Name = viewName Dan
            swDraw.ActivateView (viewName)
            Hoek = swView.Hoek
            swView.Angle = Hoek + (45 / 57.3)
            
        Einde als
    Volgend
Einde als
swDraw.ForceHerbouwen
Einde Sub

Vriendelijke groeten.

Kortom, en door te verwijderen wat nutteloos is:

Dim swApp als SldWorks.SldWorks
Dim swDoc als ModelDoc2
Dim swDraw als DrawingDoc
Dim swView als weergave
Dim viewName als tekenreeks

Sub hoofd()
'Wijzig de naam van de weergave die hier moet worden gedraaid
viewName = "Tekening View1"

Stel swApp = Toepassing.SldWorks in
Stel swDoc in = swApp.ActiveDoc
Als swDoc.GetType = swDocumentTypes_e.swDocDRAWING Dan
    Stel swDraw = swDoc in
    Stel swView = swDraw.GetFirstView in
    Hoewel het niet swView is niets
        Als swView.Name = viewName Dan
            swView.Angle = swView.Angle + (45 / 57.3)
        Einde als
        Stel swView in = swView.GetNextView
    Gaan
Einde als
swDraw.ForceHerbouwen
Einde Sub

Goede :) code

1 like

Hallo 

Het is perfect, deze laatste code werkt!!!  

Nog een laatste klein dingetje en ik zou de laatste macro kunnen posten, is het mogelijk om de macro toe te passen op de geselecteerde weergave? Ik heb het geprobeerd met dingen als viewName = swapp. ActiveView of viewName = Activeview.GetName, maar het werkt niet. 

 

Samenvattend Op de lijn: 

'Wijzig de naam van de weergave die hier moet worden gedraaid
viewName = "Tekening View1"

Ik zou "tekeningaanzicht1" moeten vervangen door "geselecteerde aanzicht"  

Het lukt me om met een paar macro's in VBA te sleutelen, maar ik doe ze niet vaak, het is moeilijk bij te houden. 

Een laatste helpende hand zou welkom zijn. 

 

Bij voorbaat dank.  

Vriendelijke groeten.

Hallo

Gebruik de SlectById2 functie naast activeview, in theorie zou het moeten werken.

Hallo

De functie SelectByIDX() retourneert geen waarde.

Je moet door een SelectionManager object gaan om de selecties op te halen. Vervolgens moet u controleren of het geselecteerde object inderdaad van het type Weergave is. Vanaf daar blijft de code die ik je heb gegeven ongewijzigd.

Om u te helpen, zoekt u naar "Geselecteerd object ophalen Solidworks api" in Google.

Goedenavond

De macrocode is gewijzigd om de selectie te roteren.

Dim swApp als SldWorks.SldWorks
Dim swDoc als ModelDoc2
Dim swDraw als DrawingDoc
Dim swView als weergave
Dim viewName als tekenreeks
Zon swSelMgr Als SelectieMgr
Sub hoofd()

Stel swApp = Toepassing.SldWorks in
Stel swDoc in = swApp.ActiveDoc
Als swDoc.GetType = swDocumentTypes_e.swDocDRAWING Dan
    Stel swDraw = swDoc in
    Stel swSelMgr = swDoc.SelectionManager in
    Stel swView = swSelMgr.GetSelectedObject5(1) in
    Hoewel het niet swView is niets
        Als swView.Name = viewName Dan
            swView.Angle = swView.Angle + (45 / 57.3)
        Einde als
        Stel swView in = swView.GetNextView
    Gaan
Einde als
swDraw.ForceHerbouwen
Einde Sub

Wees voorzichtig, ik heb de code niet afgeschermd, je moet foutafhandeling toevoegen.

Hallo 

 

Hartelijk dank voor uw antwoord, sorry dat ik het niet eerder kon beantwoorden. 

 

Ik heb de macro getest die je me in het vorige bericht hebt laten vallen, helaas werkt het niet, ik kan niet vinden waarom. Zelfs na reconstructie verandert het gezichtsvermogen niet van positie. 

 

Ik blijf op eigen houtje zoeken. Werkt macro voor u? 

 

Oprecht

Indien nodig, de macro die ik gebruik (een links en een rechts).

Bedankt allemaal voor de hulp


90right.swp

Hallo

Bedankt, maar het verhoogt de hoek niet zoals gevraagd in een van de berichten?

Vriendelijke groeten

Hallo

Hier is de code om de geselecteerde weergave te verhogen. Aan de andere kant moet je de weergave elke keer opnieuw selecteren.

Dim swApp als SldWorks.SldWorks
Dim swDoc als ModelDoc2
Dim swDraw als DrawingDoc
Dim swView als weergave
Zon swSelMgr Als SelectieMgr

Sub hoofd()

Stel swApp = Toepassing.SldWorks in
Stel swDoc in = swApp.ActiveDoc

Als swDoc.GetType = swDocumentTypes_e.swDocDRAWING Dan
    Stel swDraw = swDoc in
    Stel swSelMgr = swDoc.SelectionManager in
    Stel swView = swSelMgr.GetSelectedObject5(1) in
    swView.Angle = swView.Angle + (45 * 3.14159265358979 / 180)
Einde als

'swDraw.ForceHerbouw

Einde Sub