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