Kolor makro SW

Witam

Chcę zastosować kolor do ostatniej bryły utworzonej przez makro

Problem polega na tym, że chociaż makro wydaje się działać, wizualizacja jest

Na przykład tutaj zielony kolor wybrany za pomocą 3 niestandardowych właściwości, w ustawieniach jest zielony, ale wizualnie jest, tylko jeśli zamknę i ponownie otworzę plik, kolor jest dobrze wyświetlany

Kto ma pomysł?

 Sub coul()

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim valout As String
Dim R As String
Dim G As String
Dim B As String
Dim vProp As Variant
Dim bool As Boolean
Dim swModelDocExt As ModelDocExtension
Dim swCustPropMgr  As SldWorks.CustomPropertyManager
Dim swFeat As SldWorks.Feature

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swModelDocExt = swModel.Extension
Set swCustPropMgr = swModelDocExt.CustomPropertyManager("")
Set swFeat = swModel.Extension.GetLastFeatureAdded
    
'vProp = swFeat.GetMaterialPropertyValues2(swInConfigurationOpts_e.swThisConfiguration, Empty)
vProp = swFeat.GetMaterialPropertyValues2(1, Empty)

bool = swCustPropMgr.Get4("couleur_R", False, R, valout)
bool = swCustPropMgr.Get4("couleur_G", False, G, valout)
bool = swCustPropMgr.Get4("couleur_B", False, B, valout)

vProp(0) = R / 255
vProp(1) = G / 255
vProp(2) = B / 255
'vProp(3) = 0 'Ambient
'vProp(4) = 0 'Diffuse
'vProp(5) = 0 'Specularity
'vProp(6) = 0 'Shininess
'vProp(7) = 0 'Transparency
'vProp(8) = 0 'Emission
 
'swFeat.SetMaterialPropertyValues2 vProp, swInConfigurationOpts_e.swAllConfiguration, Empty
swFeat.SetMaterialPropertyValues2 vProp, swAllConfiguration, Empty
swModel.ClearSelection2 True

End Sub

 


piece_1.png
piece_1_a.png

Witam

O ile się nie mylę, musimy się odbudować.

Przed swModel.Clearsselection powinniśmy dodać:

swModel.Forcerebuild3 False

 

3 polubienia

Witam

Właśnie próbowałem, to nie działa

FYI 3 właściwości niestandardowe:

couleur_R = "0"

couleur_G = "255"

couleur_B = "0"

Dobry wieczór

Czy anomalia może wynikać z faktu, że funkcja SolidWorks, której dotyczy makro, jest ciałem doskonale czarnym w fizycznym sensie tego terminu, ponieważ nie jest do niej przypisana żadna wartość światła? Skojarzone ustawienia domyślnie mają wartość 0.
Powinno wystarczyć podanie wartości zmiennym vProp(3) do vProp(8), aby oświetlić ciało.
Wyobrażam sobie, że podczas ponownego wczytywania pliku ciału przypisywane są wartości światła pomieszczenia, dlatego jego kolor pojawia się ponownie.

I pojawiło się światło.

Pozdrowienia

1 polubienie

Witam

Przed uruchomieniem makra nie jest stosowany żaden kolor, kolory są obecne tylko przez zapisanie pliku, zamknięcie i ponowne otwarcie pliku

Problem jest taki sam, jeśli uruchamiam dokładnie to makro (zmieniając ścieżkę do pliku), dotyczące koloru funkcji

http://help.solidworks.com/2019/english/api/sldworksapi/change_color_of_component_in_specific_display_state_example_vb.htm

Witam

Jak wyjaśnił  m.blt , nie ma światła (wartości vProp(3) do 8 są domyślnie na poziomie -1, więc = brak światła).

Testowałem z poniższym kodem, daje mi dużo zieleni na ostatnim wytłoczeniu. Z drugiej strony, kod w takiej postaci, w jakiej został napisany, odnosi się do funkcji, a nie do treści.

Sub coul()

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim valout As String
Dim R As String
Dim G As String
Dim B As String
Dim vProp As Variant
Dim bool As Boolean
Dim bret As Boolean
Dim swModelDocExt As ModelDocExtension
Dim swCustPropMgr  As SldWorks.CustomPropertyManager
Dim swFeat As SldWorks.Feature

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swModelDocExt = swModel.Extension
Set swCustPropMgr = swModelDocExt.CustomPropertyManager("")
Set swFeat = swModel.Extension.GetLastFeatureAdded
'vProp = swFeat.GetMaterialPropertyValues2(swInConfigurationOpts_e.swThisConfiguration, Empty)
vProp = swFeat.GetMaterialPropertyValues2(1, Empty)

bool = swCustPropMgr.Get4("couleur_R", False, R, valout)
bool = swCustPropMgr.Get4("couleur_G", False, G, valout)
bool = swCustPropMgr.Get4("couleur_B", False, B, valout)

R = 0
G = 255
B = 0
vProp(0) = R / 255
vProp(1) = G / 255
vProp(2) = B / 255
vProp(3) = 1 'Ambient
vProp(4) = 1 'Diffuse
vProp(5) = 0.5 'Specularity
vProp(6) = 0 'Shininess
vProp(7) = 0 'Transparency
vProp(8) = 0 'Emission
 
swFeat.SetMaterialPropertyValues2 vProp, swInConfigurationOpts_e.swAllConfiguration, Empty

 'swFeat.SetMaterialPropertyValues2 vProp, swAllConfiguration, Empty
 swModel.ForceRebuild3 False
swModel.ClearSelection2 True

End Sub

 

Witam

o dziwo dla mnie SW 2021 SP5.1 to nie działa

Funkcja pozostaje do momentu zapisania, zamknięcia, ponownego otwarcia


animation.gif

Testowałem na SW2020, na SW2021 SP5.1 dodałem wartość 0.1 do parametru vProp(6) i kolor pojawia się poprawnie.

Następnie, jeśli naprawdę chcesz zastosować do treści, a nie do funkcji, musisz spojrzeć na ten link: Pobierz przykład wartości właściwości materiału (VBA) - 2021 - Pomoc SOLIDWORKS API

Pozostaje to dla mnie tajemnicą

Jeśli zastosuję makra powyższe ustawienia i otworzę, aby ręcznie zmienić dyspersję zwierciadlaną/rozmytą na zmienioną wartość: 0.00499999999

Jeśli ręcznie ustawię poprawną wartość na 0,6875, kolor zielony nie jest już taki sam, jak gdybym wybrał kolor zielony ręcznie bez makra, jest to ciemnozielony

 

Jeśli zmienię wielkość odbicia na 0,2 za pomocą makra, po otwarciu jest napisane 0,1

Myślę, że wchodzimy w tajemnice SW i jego zarządzania pewnymi parametrami. Kiedy już widać różnicę w zachowaniu między 2020 a 2021 rokiem.

Następnie prawdopodobnie sam dokonuje korekt, aby zrównoważyć światło na obiekcie.