| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | Zerspanungstreff mit SolidCAM bei der Hoffmann GmbH in Achim/Bremen |
Autor
|
Thema: API-Bug oder bin ich nur zu dumm? (1213 mal gelesen)
|
Kalle Mitglied Student
Beiträge: 706 Registriert: 14.04.2002
|
erstellt am: 12. Okt. 2001 12:00 <-- editieren / zitieren --> Unities abgeben:
Aloah API-Spezialisten, ich habe vor mir ein kleines Tool zu schreiben, dass es mir zu Beginn der Teileerstellung ermöglicht auszuwählen, auf welchen Layer das Teil später (in den Zeichnungen) soll und auch gleich die entsprechenden Farben sowohl in der Baugruppe, als auch später dann (mit einem zweiten Makro) in der Zeichnung einstellt. Um mein Teil gleich zu Beginn richtig einzufärben würde ich im Normalfall über die Dokumenteigenschaften die Farben der einzelnen Featurearten ändern bzw. die Farbe für den Punkt "Schattiert" und das Häkchen für "Featurefarben ignorieren" setzen. So, damit ich die Farben über die API ändern kann muss ich wohl den Befehl MaterialPropertyValues benutzen und das ganze sähe dann wahrscheinlich so aus: Code:
Dim swApp As Object Dim Part As Object Dim MatVal As VariantSub main() Set swApp = CreateObject("SldWorks.Application") Set Part = swApp.ActiveDoc MatVal = Array(0.8, 0.7, 0.6, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9) Part.MaterialPropertyValues = MatVal MatVal = Part.MaterialPropertyValues End Sub
Die Zeile MatVal = Part.MaterialPropertyValues hab ich noch mit reingeschrieben um zu überprüfen ob auch wirklich das passiert was ich will, denn irgendwie sind nie die Farben und Oberflächeneigenschaften eingestellt worden, die ich haben wollte. Wenn man jetzt in der Einzelschrittausführung die Überwachung für MatVal einschaltet sieht man, dass nach dem setzten und wieder auslesen von MaterialPropertyValues total andere Werte rauskommen. Ist das jetzt ein API Bug oder mache ich da irgendwas falsch? Und noch eine Frage: Wie sage ich VB, dass mein Array aus Doubles besteht? Ich behelfe mir derzeit damit, dass ich weder die 0 noch die 1 verwende und somit niemals Interger bekomme. Erstmal aber ein schönes Wochenende und am Montag hat mir dann hoffentlich schon jemand geholfen. Bis dann Kalle
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 12. Okt. 2001 14:12 <-- editieren / zitieren --> Unities abgeben: Nur für Kalle
Hi Kalle, das mit der Übergabe des Safearrays als Variant ist auch wirklich ziemlich komisch beim ersten Mal. Der Code könnte so aussehen:
Code:
Sub main() Dim SWXMatPropArray As Variant Dim SWXMatProp(8) As Double Dim ret As Boolean ' Dim SwApp As Object Dim Part As Object ' an laufendes SolidWorks anklinken Set SwApp = CreateObject("SldWorks.Application") Set Part = SwApp.ActiveDoc ' Die übergebenen Werte sind Doubles von 0-1, werden umgerechnet von ' vorhandenen INT-Werte. Das sind die namen der Variablen. ' red - blue gehen von 0 - 255, Ambient bis Emission von 0 - 100 ' ACHTUNG: um ein Safearray an SolidWorks zu übergeben muss eine Umformatierung ' in das Safearray erfolgen siehe API-Dokumentation SWXMatProp(0) = CDbl(12 / 255) 'rot SWXMatProp(1) = CDbl(100 / 255) 'grün SWXMatProp(2) = CDbl(198 / 255) 'blau SWXMatProp(3) = CDbl(100 / 100) 'Ambient SWXMatProp(4) = CDbl(100 / 100) 'Diffuse SWXMatProp(5) = CDbl(100 / 100) 'Specular SWXMatProp(6) = CDbl(31 / 100) 'Shininess SWXMatProp(7) = CDbl(0 / 100) 'Transparency SWXMatProp(8) = CDbl(0 / 100) 'Emission ' hier die entscheidende Umwandlung in ein SafeArray (Variant) SWXMatPropArray = SWXMatProp Part.MaterialPropertyValues = (SWXMatPropArray) End Sub
das Double-Array dimensioniert man einfach vorher, die Umwandlung des Double-Arrays in den Variant ist der eigentliche Trick und bei der Zuweisung mit MaterialPropertyValues müssen nochmal Klammern drum. Ciao, Stefan ------------------ -- Inoffizielle Solidworks Hilfeseite http://solidworks.cad.de EMail: Stefan.Berlitz@solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 12. Okt. 2001 14:17 <-- editieren / zitieren --> Unities abgeben: Nur für Kalle
Ich wieder Du must einfach nur bei deinen Zeilen die Klammern um MatVal machen, also Part.MaterialPropertyValues = (MatVal), dann klappt's auch mit dem Nachbarn. Für Nullen und Einsen schreibst du einfach 0.0 und 1.0 oder direkt 0# oder 1# Ciao, Stefan
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kalle Mitglied Student
Beiträge: 706 Registriert: 14.04.2002
|
erstellt am: 15. Okt. 2001 06:33 <-- editieren / zitieren --> Unities abgeben:
Aloha Stefan, danke für den Beispielcode. Mit dem funktionierts. Auch wenn ich eigentlich immernoch nicht verstehe warum es mit meiner Version nicht so klappt wie ich's gerne hätte. Aber erstmal kann ich damit leben. Vielleicht muss ich mich dann doch nochmal anständig (mit Buch oder so) in VB einarbeiten, denn bisher war's dann doch eher so eine Trial and Error Geschichte. Bis dann Kalle Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|