je souhaite par macro appliquer une couleur au dernier corps créé
le problème est que malgré que la macro a l'air de fonctionner le visuel est noir
Ex ici couleur vert choisis via 3 propriétés personnalisées, dans les paramètres c'est bien vert, mais visuellement c'est noir, il n'y a que si je ferme et ré-ouvre le fichier que la couleur s'affiche bien
qui a une idée ?
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
L'anomalie serait-elle due au fait que la fonction SolidWorks concernée par la macro est un corps noir au sens physique du terme, puisqu'aucune valeur de lumière ne lui est attribuée. Les paramètre associés sont par défaut à 0. Il devrait suffire de donner des valeurs aux variables vProp(3) à vProp(8) pour éclairer le corps. J'imagine qu'en rechargeant le fichier, le corps se voit affecter les valeurs de lumière de la pièce, ce qui explique que sa couleur réapparaît.
Comme l'a expliqué m.blt, il n'y a pas de lumière (les valeur vProp(3) à 8 sont à -1 par défaut donc = pas de lumière).
J'ai testé avec le code ci-dessous ça me donne bien du vert sur la dernière extrusion. Par contre le code tel qu'écrit applique à la fonction et non au corps.
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
si j'applique par macro les paramètres ci dessus et que j'ouvre pour modifier manuellement la dispersion spéculaire/flou à changée de valeur : 0.00499999989
si je met la valeur correcte à la main 0.6875, la couleur verte n'est alors plus la même que si j'avais choisis la couleur verte manuellement sans macro, c'est un vert foncé
si je change par macro la quantité de réflexion à 0.2, quand j'ouvre il est écrit 0.1
Je pense que l'on rentre dans les mystères de SW et sa gestion de certains paramètres. Quand on voit déjà la différence de comportement entre 2020 et 2021.
Après il fait probablement des ajustements lui-même pour équilibrer la lumière sur l'objet.