Mir ist unklar, warum je nach aktueller Bildschirmskalierung die Funktion SketchManager.Create3PointArc unterschiedliche Ergebnisse liefert. Anbei ein Beispiel:
Die Datei Zahn.bas enthält einen Evolventenzahngeometrie, die im SolidWorks nach VBA importiert werden kann, um eine Makrodatei (.swp) zu erzeugen.
Sie enthält 2 Kreisbögen und ein paar Splines.
Wird eine Skizze geöffnet und das Makro darin ausgeführt, hängt das Ergebnis von der aktuellen Zoom-Einstellung ab: Bild1b zeigt das Ergebnis, wenn die Zahngeometrie sehr klein im Verhältnis zum Anzeigebereich des Bildschirms ist (wie Bild1), Bild2 mit etwas anderem Zoomfaktor und im Bild3 wenn der Zoomfaktor etwa in der gleichen Größenordnung liegt wie die Abmessungen der Geometrie. Im ersten und zweiten Fall stimmen die Endpunktkoordinaten und der Kreisdurchgangspunkt auch nicht mit den Makrowerten überein, wenn man die Kurvensegmente in der Skizze untersucht. Hat jemand dafür eine Erklärung oder noch besser eine Lösung?
Bild1: Weit weg
Bild1b: Herangezoomtes Bild1
Bild2: Nicht ganz so weit weg (immer noch falsch)
Bild3: Nahe Skalierung bei Makroausführung. So sollte es immer aussehen
Auszug aus dem Code von Zahn.bas:
Option Explicit
Dim swApp As Object
Dim Part As Object
Dim pointArray As Variant
Dim points() As Double
Sub main()
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
Part.ClearSelection2 True
With Part.SketchManager
.Create3PointArc 9.63957183508436E-04, 5.62592072619751E-02, 0, 3.58469958757168E-04, 5.63228465336958E-02, 0, 6.61978757874054E-04, 5.62983071633673E-02, 0
ReDim points(0 To 17) As Double
points(0) = 3.58469958757168E-04
points(1) = 5.63228465336958E-02
points(2) = 0
points(3) = 2.64892600427464E-04
points(4) = 5.63580709538893E-02
points(5) = 0
points(6) = 1.83893473583847E-04
points(7) = 5.64518565985445E-02
points(8) = 0
points(9) = 1.24482998019793E-04
points(10) = 5.66020073525614E-02
points(11) = 0
points(12) = 9.53649174349324E-05
points(13) = 5.68052421003048E-02
points(14) = 0
points(15) = 1.04819017198107E-04
points(16) = 5.70572328560805E-02
points(17) = 0
pointArray = points
.CreateSpline ((pointArray))
...
Solidworks API Create3PointArc
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP