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.