Bonjour à tous et toutes,
J'ai besoin de changer la couleur d'un ASM avec une macro, sans toucher à la couleur des pièces, donc vraiment au niveau de l'ASM, visuellement dans l'arbre de construction c'est l'apparence juste à coté du nom de l'ASM.
Après plusieurs heures de recherches je suis finalement tombé sur une macro, que j'ai adapté à ma sauce, mais quand je l'exécute, il se passe juste...rien :
Sub main()
Dim swApp As SldWorks.SldWorks
Dim Modeldoc2 As SldWorks.Modeldoc2
Dim swAss As SldWorks.AssemblyDoc
Dim vMatProp As Variant
Set swApp = Application.SldWorks
Set Modeldoc2 = swApp.ActiveDoc
vMatProp = Modeldoc2.MaterialPropertyValues
If Modeldoc2.GetType = swDocASSEMBLY Then
Set swAss = Modeldoc2
vMatProp = Modeldoc2.MaterialPropertyValues
vMatProp(0) = 2 'Red
vMatProp(1) = 0 'Green
vMatProp(2) = 0 'Blue
vMatProp(3) = 1 / 2 + 0.5 'Ambient
vMatProp(4) = 1 / 2 + 0.5 'Diffuse
vMatProp(5) = 1 'Specular
vMatProp(6) = 1 * 0.9 + 0.1 'Shininess
Modeldoc2.MaterialPropertyValues = vMatProp
Else
MsgBox ("Utiliser cette macro sur un assemblage")
Exit Sub
End If
'Redraw to see new color
Modeldoc2.GraphicsRedraw2
End Sub
Si je remplace Modeldoc2.GetType = swDocASSEMBLY par Modeldoc2.GetType = swDocPART ça fonctionne, mais que sur les PART (logique), j'en ai conclu que le problème pourrait venir de Modeldoc2.MaterialPropertyValues = vMatProp qui n'est peut être pas adapté à l'utilisation sur un ASM.
Quelqu'un aurait-il une solution svp?
Bonjour;
Vous cherchez à remplacer les matèriaux ou les apparences (couleurs) ?
Si vous souhaitez créer des groupes d'apparences, il est préférable de passer par l'outils Evaluer/visualisation de l'assemblage...
-> voir 3dexperience.3ds.com/ search visualisation assembly (Forum Solidworks- en z'anglais- mais compréhensible)
Cordialement.
1 « J'aime »
Bonjour,
Merci pour le lien mais hélas la visualisation d'assemblage ne me sera pas d'un grand secours dans ce cas-ci.
J'ai besoin de remplacer simplement l'apparence, comme suit :
Dans l'ASM actif et ce quel que soit son nom de fichier.
Cordialement.
Pour changer cette couleur le seule moyen que j'avais trouvé était de créer une apparence avec la couleur désiré puis de modifier l'apparence au niveau de l'assemblage:
Debug.Print "Changement de couleur de l'assemblage"
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swAppearance As SldWorks.RenderMaterial
Dim vMat(8) As Double
Dim nDecalID As Long
Set swModelDocExt = swModel.Extension
swModel.ShowConfiguration2 (V(i))
Set swAssembly = swModel
vMat(0) = 0 * 255#
vMat(1) = 128 * 255#
vMat(2) = 0 * 255#
vMat(3) = 1
vMat(4) = 1
vMat(5) = 0.5
vMat(6) = 0.4
vMat(7) = 0
vMat(8) = 0
Set swAppearance = swModelDocExt.CreateRenderMaterial("U:\Entreprise\Service BE\1-Commun service\Solidworks\Macros\Améliorations\Fichiers en lien avec macro\indice-abc.p2m")
bRet = swAppearance.AddEntity(swModel)
bRet = swModelDocExt.AddRenderMaterial(swAppearance, nDecalID)
swModel.MaterialPropertyValues = vMat
swModel.GraphicsRedraw2
Si tu trouve mieux, je suis éventuellement preneur!
Bonjour sbadenis,
Après plusieurs tentatives j'ai réussi à adapter ta solution et voilà ce que ça donne pour moi :
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.Modeldoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swAppearance As SldWorks.RenderMaterial
Dim nDecalID As Long
Dim vMatProp As Variant
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
vMatProp = swModel.MaterialPropertyValues
If swModel.GetType = swDocASSEMBLY Then
Set swModelDocExt = swModel.Extension
Set swAssembly = swModel
vMatProp = swModel.MaterialPropertyValues
vMatProp(0) = 2 'Red
vMatProp(1) = 0 'Green
vMatProp(2) = 0 'Blue
vMatProp(3) = 1 / 2 + 0.5 'Ambient
vMatProp(4) = 1 / 2 + 0.5 'Diffuse
vMatProp(5) = 1 'Specular
vMatProp(6) = 1 * 0.9 + 0.1 'Shininess
Set swAppearance = swModelDocExt.CreateRenderMaterial("")
bRet = swAppearance.AddEntity(swModel)
bRet = swModelDocExt.AddRenderMaterial(swAppearance, nDecalID)
swModel.MaterialPropertyValues = vMatProp
swModel.GraphicsRedraw2
Else
MsgBox ("Utiliser cette macro sur un assemblage")
Exit Sub
End If
'Redraw to see new color
swModel.GraphicsRedraw2
End Sub
Visiblement la commande Modeldoc2.MaterialPropertyValues = vMatProp (qui est maintenant swModel.MaterialPropertyValues = vMatProp), ne sert qu'à appliquer des paramètres à une apparence déjà existante, ce qui fonctionne sur n'importe quelle pièce qui, par défaut, a forcément déjà une apparence, mais ce n'est par contre pas le cas pour les ASM. C'est pour ça qu'avec un ASM, avant de lui attribuer une couleur, il faut d'abord créer l'apparence "vierge" à l'aide de ces lignes (et bien sur des variables qui leur sont liées (Dim As, Set...)) :
Set swAppearance = swModelDocExt.CreateRenderMaterial("")
bRet = swAppearance.AddEntity(swModel)
bRet = swModelDocExt.AddRenderMaterial(swAppearance, nDecalID)
On notera aussi que Set swAppearance = swModelDocExt.CreateRenderMaterial("") ne pointe plus vers un fichier, visiblement ce n'est pas nécessaire dans mon cas.
En tout cas maintenant ça fonctionne, merci beaucoup pour votre aide.
1 « J'aime »
@acapulco24 merci pour ta réponse, si tu as une solution pour la supprimer je suis aussi preneur;-), mais merci pour ta solution, parfaitement fonctionnel effectivement.