Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  API-Bug oder bin ich nur zu dumm?

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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


Sehen Sie sich das Profil von Kalle an!   Senden Sie eine Private Message an Kalle  Schreiben Sie einen Gästebucheintrag für Kalle

Beiträge: 706
Registriert: 14.04.2002

erstellt am: 12. Okt. 2001 12:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 Variant

Sub 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)



Sehen Sie sich das Profil von StefanBerlitz an!   Senden Sie eine Private Message an StefanBerlitz  Schreiben Sie einen Gästebucheintrag für StefanBerlitz

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Kalle 10 Unities + Antwort hilfreich

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)



Sehen Sie sich das Profil von StefanBerlitz an!   Senden Sie eine Private Message an StefanBerlitz  Schreiben Sie einen Gästebucheintrag für StefanBerlitz

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Kalle 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Kalle an!   Senden Sie eine Private Message an Kalle  Schreiben Sie einen Gästebucheintrag für Kalle

Beiträge: 706
Registriert: 14.04.2002

erstellt am: 15. Okt. 2001 06:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz