SW macro couleur

Bonjour,

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

 


piece_1.png
piece_1_a.png

Bonjour,

Sauf erreur de ma part il faut reconstruire.

Avant swModel.Clearselection, il faudrait ajouter:

swModel.Forcerebuild3 False

 

3 « J'aime »

Bonjour,

je viens d'essayer ça ne fonctionne pas

pour info les 3 propriétées personnalisées :

couleur_R = "0"

couleur_G = "255"

couleur_B = "0"

Bonsoir,

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.

Et la lumière fut.

Cordialement

1 « J'aime »

Bonjour,

aucune couleur n'est appliquée avant de lancer la macro, il n'y a qu'en enregistrant, fermer et re ouvrir le fichier que les couleurs sont présentes

le problème est le même si j'exécute exactement cette macro (en changeant le chemin des fichiers), concernant la couleur des fonctions

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

Bonjour,

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

 

Bonjour,

bizarrement pour moi SW 2021 SP5.1 cela ne fonctionne pas

la fonction reste noir jusqu'à enregistrement, fermeture, réouverture


animation.gif

J'avais testé sur SW2020, sur SW2021 SP5.1 j'ai ajouté la valeur 0.1 au paramètre vProp(6) et la couleur apparait correctement.

Après si vous voulez vraiment appliquer au corps et non à la fonction il faut regarder du côté de ce lien : Get Material Property Values Example (VBA) - 2021 - SOLIDWORKS API Help

Il reste tout de même un mystère pour moi

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.