Author Topic: Select the light mix list item by light  (Read 165 times)

2024-05-11, 05:57:20

SRY

  • Active Users
  • **
  • Posts: 14
    • View Profile
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# .

2024-05-11, 09:27:58
Reply #1

James Vella

  • Active Users
  • **
  • Posts: 552
    • View Profile
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..
« Last Edit: 2024-05-11, 09:57:41 by James Vella »

2024-05-11, 20:21:20
Reply #2

SRY

  • Active Users
  • **
  • Posts: 14
    • View Profile
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.

2024-05-12, 13:22:00
Reply #3

James Vella

  • Active Users
  • **
  • Posts: 552
    • View Profile
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.
« Last Edit: 2024-05-12, 14:58:08 by James Vella »