Chaos Corona Forum

Chaos Corona for 3ds Max => [Max] I need help! => Topic started by: SRY on 2024-05-11, 05:57:20

Title: Select the light mix list item by light
Post by: SRY on 2024-05-11, 05:57:20
Is there a way to select the light mix list item by light? You know, On the contrary, we can do it. I want to do that in Maxscript or C# .
Title: Re: Select the light mix list item by light
Post by: James Vella on 2024-05-11, 09:27:58
You can reference this post about the lightmix, which has valuable information on scripting the lightmix:
https://forum.corona-renderer.com/index.php?topic=32697.0

From that post I put this together for you, you can also use more loops to do other stuff but the basics are here. Its a bit quick so you can clean it up for your use but you should get the point:

Code: [Select]
coronaLights = #()
for i in getclassinstances CShading_LightSelect do
(
    -- Adds array, eg Light_Select 2 might have 3 lights, etc.
    append coronaLights i.includedNodes
)

-- select the light in the first Light_Select - 1 light in this array
select coronaLights[1][1]

Also if you want to select all the lights in say Light_Select 2, remove the last line (select coronaLights[1][1]) and use this instead:

Code: [Select]
--select the lights in the second Light_Select - 2 or more lights in this array
lightSel = for j in coronaLights[2] collect j
select lightSel

Or just have it do multiple for loops, like for i in coronaLights for j in i etc..
Title: Re: Select the light mix list item by light
Post by: SRY on 2024-05-11, 20:21:20
Hi James Velia, Maybe I wasn't clear enough. I mean when I select a light in the scene ,LightMix Item was selected in FVB UI . so I can know some LightMix Item need to change color or intensity. this saves searching time. Otherwise finding the right one among dozens of lights is not simple thing.
Title: Re: Select the light mix list item by light
Post by: James Vella on 2024-05-12, 13:22:00
Well I dont know how to access the UI but you can use this instead, select a light and run this script, it will give you a messagebox with the Light Select Elements name:

Code: [Select]
-- Struct to hold LightSelect Element and Lights associated to that Element
struct LightMixData
(
elementName,
lights
)

-- Add the Lights & Elements to the Struct
lightMixTable = #()
for i in getclassinstances CShading_LightSelect do
(
lightMixEntry = LightMixData()
lightMixEntry.elementName = i.name
lightMixEntry.lights = i.includedNodes
append lightMixTable lightMixEntry
)

-- Messagebox to show user the light element for selected light
fn ShowMessageForSelectedLight =
(
    -- Get the currently selected nodes
    selectedNodes = getCurrentSelection()
    if selectedNodes.count == 0 then exit
   
    for node in selectedNodes do
    (
        if isKindOf node Light do
        (
            elementName = for entry in lightMixTable where findItem entry.lights node != 0 collect entry.elementName
           
            if elementName.count > 0 then
                messageBox ("Element Name: " + elementName[1] + "\nLight Name: " + node.name)
            else
                messageBox("Element Name not found for: " + node.name)
        )
    )
)

-- Run Main Function
ShowMessageForSelectedLight()

Edit:
I think access to Lightmix via maxscript is currently in development (by user request). Once this is rolled out we should have access directly to the value/color in the lightmix which would be great because we can extend this script and build a little UI so when you select a light you can directly change properties in the lightmix as needed.