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