Verander ASM-kleur met een macro

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.