Hallo allemaal,
Ik moet de kleur van een ASM veranderen met een macro, zonder de kleur van de onderdelen aan te raken, dus echt op ASM-niveau, visueel in de bouwboom, het is het uiterlijk direct naast de ASM-naam.
Na enkele uren onderzoek kwam ik eindelijk een macro tegen, die ik heb aangepast aan mijn saus, maar als ik hem draai, gebeurt het gewoon... Niets :
Sub hoofd()
Dim swApp als SldWorks.SldWorks
Dim Modeldoc2 als SldWorks.Modeldoc2
Dim swAss als SldWorks.AssemblyDoc
Dim vMatProp als variant
Stel swApp = Toepassing.SldWorks in
Stel Modeldoc2 in = swApp.ActiveDoc
vMatProp = Modeldoc2.MateriaaleigenschapWaarden
Als Modeldoc2.GetType = swDocASSEMBLY dan
Stel swAss in = Modeldoc2
vMatProp = Modeldoc2.MateriaaleigenschapWaarden
vMatProp(0) = 2 'Rood
vMatProp(1) = 0 'Groen
vMatProp(2) = 0 'Blauw
vMatProp(3) = 1 / 2 + 0,5 'Omgeving
vMatProp(4) = 1 / 2 + 0,5 'Diffuus
vMatProp(5) = 1 'Spiegelend
vMatProp(6) = 1 * 0,9 + 0,1 'Glans
Modeldoc2.MaterialPropertyValues = vMatProp
Anders
MsgBox ("Gebruik deze macro op een assembly")
Sub afsluiten
Einde als
'Teken opnieuw om een nieuwe kleur te zien
Modeldoc2.GraphicsRedraw2
Einde Sub
Als ik Modeldoc2.GetType = swDocASSEMBLY vervang door Modeldoc2.GetType = swDocPART werkt het, maar op de PART (logisch) concludeerde ik dat het probleem zou kunnen komen van Modeldoc2.MaterialPropertyValues = vMatProp die mogelijk niet geschikt is voor gebruik op een ASM.
Heeft iemand een oplossing alstublieft?
Hallo;
Op zoek naar vervanging van materialen of uiterlijk (kleuren)?
Als u groepen van verschijningen wilt maken, kunt u het beste de tool Assemblage evalueren/visualiseren gebruiken...
-> zie 3dexperience.3ds.com/ zoek visualisatie assemblage (Solidworks Forum)
Vriendelijke groeten.
1 like
Hallo
Bedankt voor de link, maar helaas zal de visualisatie van de montage mij in dit geval niet veel helpen.
Ik moet gewoon het uiterlijk vervangen, zoals dit:

In de actieve ASM, ongeacht de bestandsnaam.
Vriendelijke groeten.
Om deze kleur te veranderen, was de enige manier die ik vond om een look te creëren met de gewenste kleur en vervolgens de look op assemblageniveau te veranderen:
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
Als je het beter vindt, zal ik het uiteindelijk nemen!
Hallo sbadenis,
Na verschillende pogingen ben ik erin geslaagd om uw oplossing aan te passen en zo ziet het er voor mij uit:
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
Blijkbaar wordt het commando Modeldoc2.MaterialPropertyValues = vMatProp (dat nu swModel.MaterialPropertyValues = vMatProp is), alleen gebruikt om parameters toe te passen op een reeds bestaand uiterlijk, dat werkt op elk onderdeel dat standaard al een uiterlijk moet hebben, maar dit is niet het geval voor ASM's. Daarom moet u bij een ASM, voordat u er een kleur aan toekent, eerst het "lege" uiterlijk creëren met behulp van deze regels (en natuurlijk de variabelen die daarmee verband houden (Dim As, Set...)):
Stel swAppearance = swModelDocExt.CreateRenderMaterial("") in
bRet = swAppearance.AddEntity(swModel)
bRet = swModelDocExt.AddRenderMaterial(swAppearance, nDecalID)
Er moet ook worden opgemerkt dat Set swAppearance = swModelDocExt.CreateRenderMaterial("") niet langer naar een bestand verwijst, uiteraard is dit in mijn geval niet nodig.
Hoe dan ook, nu werkt het, heel erg bedankt voor je hulp.
1 like
@acapulco24 bedankt voor je antwoord, als je een oplossing hebt om het te verwijderen, ben ik ook geïnteresseerd ;-), maar bedankt voor je oplossing, perfect functioneel inderdaad.