SW Macro Kleur

Hallo

Ik wil een kleur toepassen op het laatste lichaam dat door macro is gemaakt

Het probleem is dat, hoewel de macro lijkt te werken, het beeld zwart is

Bijvoorbeeld hier groene kleur gekozen via 3 aangepaste eigenschappen, in de instellingen is het groen, maar visueel is het zwart, alleen als ik het bestand sluit en opnieuw open wordt de kleur goed weergegeven

Wie heeft een idee?

 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

Hallo

Als ik me niet vergis, moeten we opnieuw opbouwen.

Vóór swModel.Clearselection moeten we toevoegen:

swModel.Forcerebuild3 False

 

3 likes

Hallo

Ik heb het net geprobeerd, het werkt niet

Ter info: de 3 aangepaste eigenschappen:

couleur_R = "0"

couleur_G = "255"

couleur_B = "0"

Goedenavond

Zou de anomalie te wijten kunnen zijn aan het feit dat de SolidWorks-functie waarop de macro betrekking heeft, een zwart lichaam is in de fysische zin van het woord, aangezien er geen lichtwaarde aan wordt toegekend? De bijbehorende instellingen zijn standaard ingesteld op 0.
Het zou voldoende moeten zijn om waarden te geven aan de variabelen vProp(3) tot vProp(8) om het lichaam te verlichten.
Ik stel me voor dat bij het opnieuw laden van het bestand het lichaam de lichtwaarden van de kamer krijgt toegewezen, waardoor de kleur opnieuw verschijnt.

En er was licht.

Vriendelijke groeten

1 like

Hallo

Er wordt geen kleur toegepast voordat de macro wordt gestart, alleen door het bestand op te slaan, te sluiten en opnieuw te openen zijn de kleuren aanwezig

Het probleem is hetzelfde als ik precies deze macro uitvoeren (door het bestandspad te wijzigen), met betrekking tot de kleur van de functies

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

Hallo

Zoals m.blt uitlegde  , is er geen licht (de vProp(3) waarden tot 8 staan standaard op -1 dus = geen licht).

Ik heb getest met de onderstaande code, het geeft me veel groen op de laatste extrusie. Aan de andere kant is de code zoals geschreven van toepassing op de functie en niet op het lichaam.

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

 

Hallo

vreemd voor mij SW 2021 SP5.1 het werkt niet

De functie blijft zwart totdat deze wordt opgeslagen, gesloten of opnieuw wordt geopend


animation.gif

Ik had getest op SW2020, op SW2021 SP5.1 heb ik de waarde 0.1 toegevoegd aan de vProp(6) parameter en de kleur verschijnt correct.

Daarna, als je echt op het lichaam wilt toepassen en niet op de functie, moet je naar deze link kijken: Voorbeeld van materiaaleigenschapswaarden ophalen (VBA) - 2021 - SOLIDWORKS API Help

Het blijft voor mij een raadsel

Als ik macro de bovenstaande instellingen toe te passen en open om handmatig de spiegel/vervaging dispersie te wijzigen in gewijzigde waarde: 0.004999999999

Als ik met de hand de juiste waarde op 0,6875 zet, is de groene kleur niet meer hetzelfde als wanneer ik de groene kleur handmatig zonder macro had gekozen, het is een donkergroene

 

Als ik de hoeveelheid reflectie verander in 0.2 door macro, wanneer ik het open wordt geschreven 0.1

Ik denk dat we ons begeven in de mysteries van SW en het beheer van bepaalde parameters. Wanneer je nu al het verschil in gedrag ziet tussen 2020 en 2021.

Daarna maakt hij waarschijnlijk zelf aanpassingen om het licht op het object in balans te brengen.