Chcę zastosować kolor do ostatniej bryły utworzonej przez makro
Problem polega na tym, że chociaż makro wydaje się działać, wizualizacja jest
Na przykład tutaj zielony kolor wybrany za pomocą 3 niestandardowych właściwości, w ustawieniach jest zielony, ale wizualnie jest, tylko jeśli zamknę i ponownie otworzę plik, kolor jest dobrze wyświetlany
Kto ma pomysł?
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
Czy anomalia może wynikać z faktu, że funkcja SolidWorks, której dotyczy makro, jest ciałem doskonale czarnym w fizycznym sensie tego terminu, ponieważ nie jest do niej przypisana żadna wartość światła? Skojarzone ustawienia domyślnie mają wartość 0. Powinno wystarczyć podanie wartości zmiennym vProp(3) do vProp(8), aby oświetlić ciało. Wyobrażam sobie, że podczas ponownego wczytywania pliku ciału przypisywane są wartości światła pomieszczenia, dlatego jego kolor pojawia się ponownie.
Jak wyjaśnił m.blt , nie ma światła (wartości vProp(3) do 8 są domyślnie na poziomie -1, więc = brak światła).
Testowałem z poniższym kodem, daje mi dużo zieleni na ostatnim wytłoczeniu. Z drugiej strony, kod w takiej postaci, w jakiej został napisany, odnosi się do funkcji, a nie do treści.
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
Jeśli zastosuję makra powyższe ustawienia i otworzę, aby ręcznie zmienić dyspersję zwierciadlaną/rozmytą na zmienioną wartość: 0.00499999999
Jeśli ręcznie ustawię poprawną wartość na 0,6875, kolor zielony nie jest już taki sam, jak gdybym wybrał kolor zielony ręcznie bez makra, jest to ciemnozielony
Jeśli zmienię wielkość odbicia na 0,2 za pomocą makra, po otwarciu jest napisane 0,1