SW-Makrofarbe

Hallo

Ich möchte eine Farbe auf den letzten Körper anwenden, der mit dem Makro erstellt wurde

Das Problem ist, dass, obwohl das Makro zu funktionieren scheint, die Grafik schwarz ist

Hier z.B. grüne Farbe, die über 3 benutzerdefinierte Eigenschaften ausgewählt wurde, in den Einstellungen ist es grün, aber visuell ist es schwarz, nur wenn ich die Datei schließe und erneut öffne, wird die Farbe gut angezeigt

Wer hat eine Idee?

 Sub coul()

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim valout As String
Dim R As String
Dim G As String
Dim B As String
Dim vProp As Variant
Dim bool As Boolean
Dim swModelDocExt As ModelDocExtension
Dim swCustPropMgr  As SldWorks.CustomPropertyManager
Dim swFeat As SldWorks.Feature

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swModelDocExt = swModel.Extension
Set swCustPropMgr = swModelDocExt.CustomPropertyManager("")
Set swFeat = swModel.Extension.GetLastFeatureAdded
    
'vProp = swFeat.GetMaterialPropertyValues2(swInConfigurationOpts_e.swThisConfiguration, Empty)
vProp = swFeat.GetMaterialPropertyValues2(1, Empty)

bool = swCustPropMgr.Get4("couleur_R", False, R, valout)
bool = swCustPropMgr.Get4("couleur_G", False, G, valout)
bool = swCustPropMgr.Get4("couleur_B", False, B, valout)

vProp(0) = R / 255
vProp(1) = G / 255
vProp(2) = B / 255
'vProp(3) = 0 'Ambient
'vProp(4) = 0 'Diffuse
'vProp(5) = 0 'Specularity
'vProp(6) = 0 'Shininess
'vProp(7) = 0 'Transparency
'vProp(8) = 0 'Emission
 
'swFeat.SetMaterialPropertyValues2 vProp, swInConfigurationOpts_e.swAllConfiguration, Empty
swFeat.SetMaterialPropertyValues2 vProp, swAllConfiguration, Empty
swModel.ClearSelection2 True

End Sub

 


piece_1.png
piece_1_a.png

Hallo

Wenn ich mich nicht irre, müssen wir neu aufbauen.

Vor swModel.Clearselection sollten wir Folgendes hinzufügen:

swModel.Forcerebuild3 False

 

3 „Gefällt mir“

Hallo

Ich habe es gerade versucht, es funktioniert nicht

Zu Ihrer Information, die 3 benutzerdefinierten Eigenschaften:

couleur_R = "0"

couleur_G = "255"

couleur_B = "0"

Guten Abend

Könnte die Anomalie daran liegen, dass es sich bei der SolidWorks-Funktion, um die es sich bei dem Makro handelt, um einen schwarzen Körper im physikalischen Sinne des Wortes handelt, da ihm kein Lichtwert zugeordnet ist? Die zugeordneten Einstellungen sind standardmäßig auf 0 festgelegt.
Es sollte ausreichen, den Variablen vProp(3) bis vProp(8) Werte zu geben, um den Körper zu beleuchten.
Ich stelle mir vor, dass beim erneuten Laden der Datei dem Körper die Lichtwerte des Raumes zugewiesen werden, weshalb seine Farbe wieder auftaucht.

Und es gab Licht.

Herzliche Grüße

1 „Gefällt mir“

Hallo

Vor dem Start des Makros wird keine Farbe angewendet, erst durch Speichern, Schließen und erneutes Öffnen der Datei sind die Farben vorhanden

Das Problem ist das gleiche, wenn ich genau dieses Makro (durch Ändern des Dateipfads) ausführe, was die Farbe der Funktionen betrifft

http://help.solidworks.com/2019/english/api/sldworksapi/change_color_of_component_in_specific_display_state_example_vb.htm

Hallo

Wie m.blt erklärt hat  , gibt es kein Licht (die vProp(3)-Werte bis 8 sind standardmäßig bei -1, also = kein Licht).

Ich habe mit dem Code unten getestet, er gibt mir bei der letzten Extrusion viel Grün. Auf der anderen Seite gilt der Code, so wie er geschrieben ist, für die Funktion und nicht für den Körper.

Sub coul()

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim valout As String
Dim R As String
Dim G As String
Dim B As String
Dim vProp As Variant
Dim bool As Boolean
Dim bret As Boolean
Dim swModelDocExt As ModelDocExtension
Dim swCustPropMgr  As SldWorks.CustomPropertyManager
Dim swFeat As SldWorks.Feature

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swModelDocExt = swModel.Extension
Set swCustPropMgr = swModelDocExt.CustomPropertyManager("")
Set swFeat = swModel.Extension.GetLastFeatureAdded
'vProp = swFeat.GetMaterialPropertyValues2(swInConfigurationOpts_e.swThisConfiguration, Empty)
vProp = swFeat.GetMaterialPropertyValues2(1, Empty)

bool = swCustPropMgr.Get4("couleur_R", False, R, valout)
bool = swCustPropMgr.Get4("couleur_G", False, G, valout)
bool = swCustPropMgr.Get4("couleur_B", False, B, valout)

R = 0
G = 255
B = 0
vProp(0) = R / 255
vProp(1) = G / 255
vProp(2) = B / 255
vProp(3) = 1 'Ambient
vProp(4) = 1 'Diffuse
vProp(5) = 0.5 'Specularity
vProp(6) = 0 'Shininess
vProp(7) = 0 'Transparency
vProp(8) = 0 'Emission
 
swFeat.SetMaterialPropertyValues2 vProp, swInConfigurationOpts_e.swAllConfiguration, Empty

 'swFeat.SetMaterialPropertyValues2 vProp, swAllConfiguration, Empty
 swModel.ForceRebuild3 False
swModel.ClearSelection2 True

End Sub

 

Hallo

seltsamerweise funktioniert es für mich SW 2021 SP5.1 nicht

Die Funktion bleibt schwarz, bis sie gespeichert, geschlossen oder wieder geöffnet wird


animation.gif

Ich hatte auf SW2020 getestet, auf SW2021 SP5.1 habe ich den Wert 0.1 zum vProp(6) Parameter hinzugefügt und die Farbe erscheint korrekt.

Wenn Sie danach wirklich auf den Körper und nicht auf die Funktion anwenden möchten, müssen Sie sich diesen Link ansehen: Beispiel für Materialeigenschaftswerte abrufen (VBA) - 2021 - SOLIDWORKS API Help

Es bleibt mir ein Rätsel

Wenn ich die obigen Einstellungen mit dem Makro anwende und öffne, um die Glanz-/Weichzeichnerdispersion manuell auf den geänderten Wert zu ändern: 0,00499999999989

Wenn ich den korrekten Wert von Hand auf 0,6875 setze, ist die grüne Farbe nicht mehr die gleiche, wie wenn ich die grüne Farbe manuell ohne Makro gewählt hätte, es ist ein dunkles Grün

 

Wenn ich die Stärke der Reflexion per Makro auf 0,2 ändere, wird sie beim Öffnen 0,1 geschrieben

Ich denke, wir treten in die Geheimnisse von SW und seiner Verwaltung bestimmter Parameter ein. Wenn man schon den Unterschied im Verhalten zwischen 2020 und 2021 sehen kann.

Danach nimmt er wahrscheinlich selbst Anpassungen vor, um das Licht auf dem Objekt auszugleichen.