Zmienianie koloru ASM za pomocą makra

Witam wszystkich,

Muszę zmienić kolor ASM za pomocą makra, bez dotykania koloru części, więc tak naprawdę na poziomie ASM, wizualnie w drzewie kompilacji jest to wygląd tuż obok nazwy ASM.

Po kilku godzinach poszukiwań w końcu natknąłem się na makro, które dostosowałem do mojego sosu, ale jak go uruchomię, to tak po prostu się dzieje... Nic :

Sub main()
Dim swApp jako SldWorks.SldWorks
Dim Modeldoc2 jako SldWorks.Modeldoc2
Dim swAss jako SldWorks.AssemblyDoc
Dim vMatProp As Variant
Ustaw swApp = Application.SldWorks
Ustaw Modeldoc2 = swApp.ActiveDoc
vMatProp = Modeldoc2.MaterialPropertyValues

 

Jeśli Modeldoc2.GetType = swDocASSEMBLY to

Ustaw swAss = Modeldoc2
vMatProp = Modeldoc2.MaterialPropertyValues

vMatProp(0) = 2 'Czerwony
vMatProp(1) = 0 'Zielony
vMatProp(2) = 0 'Niebieski
vMatProp(3) = 1 / 2 + 0.5 'Otoczenie
vMatProp(4) = 1 / 2 + 0.5 'Dyfuzyjny
vMatProp(5) = 1 'Zwierciadlane
vMatProp(6) = 1 * 0,9 + 0,1 'Połysk

Modeldoc2.MaterialPropertyValues = vMatProp

Inaczej
MsgBox ("Użyj tego makra w zestawie")
Wyjdź z subwoofera

Zakończ jeżeli:
"Przerysuj, aby zobaczyć nowy kolor
Modeldoc2.GraphicsRedraw2
Koniec subwoofera

Jeśli zamienię Modeldoc2.GetType = swDocASSEMBLY na Modeldoc2.GetType = swDocPART , to działa, ale na PART (logiczne) doszedłem do wniosku, że problem może pochodzić z Modeldoc2.MaterialPropertyValues = vMatProp , który może nie być odpowiedni do użycia w ASM.

Czy ktoś ma rozwiązanie?

 

Witam;

Chcesz zastąpić materiały lub wyglądy (kolory)?
Jeśli chcesz utworzyć grupy wyglądów, najlepiej użyć narzędzia Oceń/Wizualizuj złożenie...

-> zobacz 3dexperience.3ds.com/ wyszukiwanie złożenia wizualizacji (Forum Solidworks)
Pozdrowienia.

1 polubienie

Witam

Dziękuję za link, ale niestety wizualizacja montażu niewiele mi w tym przypadku pomoże.

Muszę po prostu zmienić wygląd, w ten sposób:

W aktywnej usłudze ASM, niezależnie od nazwy pliku.

Pozdrowienia.

Aby zmienić ten kolor, jedynym sposobem, jaki znalazłem, było stworzenie wyglądu z żądanym kolorem, a następnie zmiana wyglądu na poziomie zespołu:

        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

Jeśli znajdziesz coś lepszego, w końcu go wezmę!

Witaj sbadenis,

Po kilku próbach udało mi się zaadaptować Wasze rozwiązanie i oto jak to wygląda u mnie:


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

 

Wygląda na to, że polecenie Modeldoc2.MaterialPropertyValues = vMatProp (które teraz brzmi swModel.MaterialPropertyValues = vMatProp), jest używane tylko do stosowania parametrów do już istniejącego wyglądu, co działa na każdej części, która domyślnie musi już mieć wygląd, ale nie dotyczy to ASM. Dlatego w przypadku ASM, przed przypisaniem mu koloru, należy najpierw utworzyć "pusty" wygląd za pomocą tych linii (i oczywiście zmiennych z nimi związanych (Dim As, Set...)):

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


Należy również zauważyć, że Set swAppearance = swModelDocExt.CreateRenderMaterial("") nie wskazuje już na plik, oczywiście nie jest to konieczne w moim przypadku.

W każdym razie teraz działa, bardzo dziękuję za pomoc.

1 polubienie

@acapulco24 dziękuję za odpowiedź, jeśli masz rozwiązanie, aby to usunąć również jestem zainteresowany ;-), ale dziękuję za rozwiązanie, naprawdę doskonale funkcjonalne.