SolidWorks API Hilfe - PhotoWorks Makrosprache

construct.gif (9873 Byte)

apitut_mac04.gif (2122 Byte)

Die Informationen stammen aus einer kleinen Doku, die mir durch den API-Support von SolidWorks von Lightworks zur Verfügung gestellt wurden (natürlich in Englisch). Deswegen hier der Versuch einer Übersetzung. Bevor Sie fragen: ja, erst ab Photoworks 99.

BTW, die offizielle FAQ von SolidWorks http://www.solidworks.com/swdocs/support/api/faq/detail.cfm?id=4014 stellt immer noch fest, dass eigentlich gar keine Möglichkeit besteht Photoworks per API anzusprechen. Nun, bald wissen auch Sie es besser :-))

Doch zurück zum Original:

Das folgende Dokument beschreibt die zur Verfügung stehenden Methoden um Photoworks 99 Funktionen auch von außerhalb der lworks.dll anzusprechen. Es ist möglich, alle extern definierten Funktionen aus der lworks.dll anzusprechen, jedoch sind einige dieser Funktionen nur dazu gedacht direkt durch das Benutzerinterface von SolidWorks ausgeführt zu werden und sollten deswegen nicht benutzt werden.

Die einzige externe Funktion die benutzt werden sollte ist folgende:

long DllExport CallBackHandler ( BSTR callbackAndArguments );

Anmerkung: dies ist die Deklaration in C++ in lworks.dll. Wie Sie diese Funktion aus SolidWorks-Basic oder von Visual Basic heraus ansprechen sehen Sie am besten am Beispiel unten. Der zu übergebende Parameter callbackAndArguments legt die auszuführende Funktion und deren Parameter fest. (Ich weiß, durch die Brust ins Auge, funktioniert aber.)

Die auszuführenden Funktionen, die von Photoworks mit dieser Übergabe erkannt werden sind:

Diese Funktion führt eine Render-Operation mit den aktuellen Optionseinstellungen für Photoworks durch. Wenn zum Beispiel im Optionsdialog von Photoworks im Register Bildausgabe "Render in Datei" angeklickt ist wird diese Funktion in eine Datei rendern.

Diese Funktion dient dazu verschiedene Photworks Optionen zu setzen

Die Render Optionen können durch die folgenden Parameter gesetzt werden. Die Werte für die Parameter entnehmen Sie bitte der Tabelle weiter unten:

pwRenderRayTracing <ray tracing value>
pwRenderShadingMaterials <switch value>
pwRenderShadingAntiAliasing <switch value>
pwRenderShadingOverlayImage <switch value>
pwRenderDisplayProgressDialog <switch value>
pwRenderDisplayTexturesInIRViewChanges <switch value>

Die Ausgabeotionen könne durch die folgenden Parameter gesetzt werden. Die Werte für die Parameter entnehmen Sie bitte der Tabelle weiter unten:

pwImageOutputTarget <target value>
pwImageOutputFilename <string value>
pwImageOutputImageSizeWidth <integer value>
pwImageOutputImageSizeHeight <integer value>

Als Werte für die verschiedenen Parameter benutzen Sie bitte die folgenden Definitionen. Die Werte sind entsprechend der Optionen, die Sie auch in den Phtoworks Optionsdialogen angeben können.

ray tracing value: [ pwRayTracingNone | pwRayTracingAdaptive | pwRayTracingFull ]
switch value: [ pwSwitchOff | pwSwitchOn ]
target value: [ pwTargetRenderToWindow | pwTargetRenderToFile ]

Die Funktionen hat auch einen Rückgabewerte. Der Rückgabewert (vom type long) gibt den Status des CallBack handlers wieder:

pwCBStatusOK = 0
pwCBStatusUnknown = 1
pwCBStatusNoCallBack = 2
pwCBStatusInvalidCallBack = 3
pwCBStatusInvalidArguments = 4
pwCBStatusCallBackFailed = 5
pwCBStatusCallBackStopped = 6

Okay, alles graue Theorie, also kommt jetzt ein Beispiel für SolidWorks Basic bzw. Visual Basic:

' Zunächst die nebötigten Objekte dimensionieren
Dim swApp As Object
Dim pwCommand As String
Dim pwStatus As Long

Sub main()
   Set swApp = CreateObject ("SldWorks.Application")
   ' Erstmal zum testen das Modell im Fenster rendern
   pwCommand = "Render"
   pwStatus = swApp.Callback( "lworks@CallBackHandler", -1, pwCommand )
   ' Die Option auf "apadpives Rendering" setzen
   pwCommand = "SetOption pwRenderRayTracing pwRayTracingAdaptive"
   pwStatus = swApp.Callback( "lworks@CallBackHandler", -1, pwCommand )
   ' Ziel des Rendering auf Datei setzen
   pwCommand = "SetOption pwImageOutputTarget pwTargetRenderToFile"
   pwStatus = swApp.Callback( "lworks@CallBackHandler", -1, pwCommand )
   ' Namen der Bilddatei setzen
   ' (die Extension gibt dabei das Output-Format an)

   pwCommand = "SetOption pwImageOutputFilename C:\pw_image.bmp"
   pwStatus = swApp.Callback( "lworks@CallBackHandler", -1, pwCommand )
   'Die Bildbreite auf z.B. 640 einstellen ...
   pwCommand = "SetOption pwImageOutputImageSizeWidth 640"
   pwStatus = swApp.Callback( "lworks@CallBackHandler", -1, pwCommand )
   ' ... dann die Bildhöhe auf 480 einstellen ...
   pwCommand = "SetOption pwImageOutputImageSizeHeight 480"
   pwStatus = swApp.Callback( "lworks@CallBackHandler", -1, pwCommand )
   ' ... und in die angegebene Datei rendern
   pwCommand = "Render"
   pwStatus = swApp.Callback( "lworks@CallBackHandler", -1, pwCommand )
   ' Ziel für Rendering wieder auf Fenster
   pwCommand = "SetOption pwImageOutputTarget pwTargetRenderToWindow"
   pwStatus = swApp.Callback( "lworks@CallBackHandler", -1, pwCommand )
End Sub

Anmerkungen

Zum Schluss noch ein paar Anmerkungen: ich habe es bisher noch nicht mit SolidWorks bzw. Photoworksmitteln geschafft die für eine Automatisierung lästigen Rückfragen und Infoboxen zu unterdrücken. Also gerade beim Rendern in eine Datei kommen immer noch die Infobox, ob man denn jetzt wirklich mit diesen Einstellungen rendern möchte und man braucht halt jemanden, der auf den Knopf "Okay" klickt.

Aber dafür gibt es ja im Zweifelsfalle Tools wie z.B. BuzOf von Basta Computing ... oder man schlägt sich in VB halt mit den API-Calls herum um das Fenster zu finden und den Knopf zu drücken.

Keep on hacking!!

madhack.gif (5829 Byte)

Zurück zum Seitenanfang

hr.gif (4491 Byte)

counter Kritik und Anregungen bitte an Stefan Berlitz. Letzte Änderung dieser Seite am Donnerstag, 01. Februar 2007 17:40