Ändern der ASM-Farbe mit einem Makro

Hallo an alle

Ich muss die Farbe eines ASM mit einem Makro ändern, ohne die Farbe der Teile zu berühren, also wirklich auf ASM-Ebene, visuell im Build-Baum, ist es das Erscheinungsbild direkt neben dem ASM-Namen.

Nach mehreren Stunden Recherche stieß ich schließlich auf ein Makro, das ich an meine Sauce angepasst habe, aber wenn ich es laufen lasse, passiert es einfach... Nichts :

Sub main()
Dim swApp als SldWorks.SldWorks
Dim Modeldoc2 As SldWorks.Modeldoc2
Dim swAss As SldWorks.AssemblyDoc
Dim vMatProp als Variante
Legen Sie swApp = Application.SldWorks fest
Legen Sie Modeldoc2 = swApp.ActiveDoc fest.
vMatProp = Modeldoc2.MaterialPropertyValues

 

Wenn Modeldoc2.GetType = swDocASSEMBLY dann

Set swAss = Modeldoc2
vMatProp = Modeldoc2.MaterialPropertyValues

vMatProp(0) = 2 'Rot
vMatProp(1) = 0 'Grün
vMatProp(2) = 0 'Blau
vMatProp(3) = 1 / 2 + 0,5 'Umgebungstemperatur
vMatProp(4) = 1 / 2 + 0,5 'Diffus
vMatProp(5) = 1 'Spekular
vMatProp(6) = 1 * 0,9 + 0,1 'Glanz

Modeldoc2.MaterialPropertyValues = vMatProp

Oder
MsgBox ("Dieses Makro auf eine Baugruppe anwenden")
Sub beenden

Ende, wenn
'Neu zeichnen, um die neue Farbe zu sehen
Wählen Sie ein Modelldoc2.GraphicsRedraw2
Ende Sub

Wenn ich Modeldoc2.GetType = swDocASSEMBLY durch Modeldoc2.GetType = swDocPART ersetze, funktioniert es, aber auf dem PART (logisch) kam ich zu dem Schluss, dass das Problem von Modeldoc2.MaterialPropertyValues = vMatProp herrühren könnte, das möglicherweise nicht für die Verwendung auf einem ASM geeignet ist.

Hat bitte jemand eine Lösung?

 

Hallo;

Möchten Sie Materialien oder Erscheinungsbilder (Farben) ersetzen?
Wenn Sie Gruppen von Farbeffekten erstellen möchten, verwenden Sie am besten das Werkzeug Assemblierung auswerten/visualisieren...

-> siehe 3dexperience.3ds.com/ Suche Visualisierungsbaugruppe (Solidworks Forum)
Herzliche Grüße.

1 „Gefällt mir“

Hallo

Vielen Dank für den Link, aber leider wird mir die Montagevisualisierung in diesem Fall nicht viel helfen.

Ich muss einfach das Erscheinungsbild ersetzen, wie folgt:

Im aktiven ASM, unabhängig von dessen Dateinamen.

Herzliche Grüße.

Um diese Farbe zu ändern, habe ich nur einen Weg gefunden, einen Look mit der gewünschten Farbe zu erstellen und dann den Look auf Baugruppenebene zu ändern:

        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

Wenn du etwas Besseres findest, werde ich es irgendwann nehmen!

Hallo sbadenis,

Nach mehreren Versuchen habe ich es geschafft, Ihre Lösung anzupassen und so sieht sie für mich aus:


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

 

Anscheinend wird der Befehl Modeldoc2.MaterialPropertyValues = vMatProp (der jetzt swModel.MaterialPropertyValues = vMatProp ist) nur verwendet, um Parameter auf ein bereits vorhandenes Aussehen anzuwenden, was bei jedem Teil funktioniert, das standardmäßig bereits ein Aussehen haben muss, aber dies ist bei ASMs nicht der Fall. Deshalb muss man bei einem ASM, bevor man ihm eine Farbe zuweist, zunächst das "leere" Erscheinungsbild mit diesen Zeilen (und natürlich den damit verbundenen Variablen (Dim As, Set...)) erzeugen:

            Set swAppearance = swModelDocExt.CreateRenderMaterial("")
            bRet = swAppearance.AddEntity(swModel)
            bRet = swModelDocExt.AddRenderMaterial(swAussehen, nDecalID)


Es sollte auch beachtet werden, dass Set swAppearance = swModelDocExt.CreateRenderMaterial("") nicht mehr auf eine Datei zeigt, offensichtlich ist es in meinem Fall nicht notwendig.

Wie auch immer, jetzt funktioniert es, vielen Dank für Ihre Hilfe.

1 „Gefällt mir“

@acapulco24 danke Ihnen für Ihre Antwort, wenn Sie eine Lösung haben, um es zu entfernen, bin ich auch interessiert ;-), aber danke für Ihre Lösung, in der Tat perfekt funktionsfähig.