+try(destroyDialog ::rlNodeProperties)catch()
+rollout rlNodeProperties "Node Properties"
+ local callbackContainer
+ groupbox gbObjectProperties "Object Properties" pos:gpA width:185 height:225
+ editText uiLayerName "Layer:" width:160 readonly:true pos:(gpA + [10,20])
+ checkbox uiRenderable "Renderable" pos:(gpA + [10,40])
+ checkbox uiInheritVisibility "Inherit Visibility" pos:(gpA + [10,60])
+ checkbox uiVisibleToCamera "Visible To Camera" pos:(gpA + [10,80])
+ checkbox uiVisibleToReflectionRefraction "Visible To Reflection/Refraction" pos:(gpA + [10,100])
+ checkbox uiReceiveShadows "Receive Shadows" pos:(gpA + [10,120])
+ checkbox uiCastShadows "Cast Shadows" pos:(gpA + [10,140])
+ checkbox uiApplyAtmospherics "Apply Atmospherics" pos:(gpA + [10,160])
+ checkbox uiRenderOccludedObjects "Render Occluded Objects" pos:(gpA + [10,180])
+ spinner uiObjectID "Object ID Channel: " range:[0,1e9,0] fieldwidth:55 type:#integer pos:(gpA + [10,200])
+ groupbox gbVrayProperties "Vray Properties" pos:gpB width:185 height:265
+ checkbox uiMatteObject "Matte Object" pos:(gpB + [10,20])
+ checkbox uiMatteForReflectionRefraction "Matte for Reflection/Refraction" pos:(gpB + [10,40])
+ spinner uiAlphaContribution "Alpha Contribution: " range:[-1.0,1.0,1.0] fieldwidth:55 type:#float pos:(gpB + [10,60])
+ groupbox gbVrayDirectLight "Direct Light" pos:(gpB + [10,80]) width:165 height:65
+ checkbox uiLightShadows "Shadows" pos:(gpB + [20,100])
+ checkbox uiLightShadowsAffectAlpha "Affect Alpha" pos:(gpB + [20,120])
+ groupbox gbVrayReflectionRefractionGI "Reflection/Refraction/GI" pos:(gpB + [10,150]) width:165 height:105
+ spinner uiReflectionContribution "Refl Contribution: " range:[0.0,1.0,1.0] fieldwidth:45 type:#float pos:(gpB + [22,170])
+ spinner uiRefractionContribution "Refr Contribution: " range:[0.0,1.0,1.0] fieldwidth:45 type:#float pos:(gpB + [20,190])
+ spinner uiGiContribution "GI Contribution: " range:[0.0,1.0,1.0] fieldwidth:45 type:#float pos:(gpB + [30,210])
+ checkbox uiNoGiOnMattes "No GI On Other Mattes" pos:(gpB + [20,230])
+ fn CollectPropertyValues property:undefined type:#node =
+ local curSel = getCurrentSelection()
+ result = getUserProp n property
+ if result == undefined then
+ --if undefined then return the vray default value
+ "VRay_MoBlur_GeomSamples": append values 2
+ "VRay_GI_Generate": append values True
+ "VRay_GI_Receive": append values True
+ "VRay_GI_Multipier": append values 1.000000
+ "VRay_GI_GenerateMultipier": append values 1.000000
+ "VRay_GI_SubdivsMultiplier": append values 1.000000
+ "VRay_Caustics_Generate": append values True
+ "VRay_Caustics_Receive": append values True
+ "VRay_Caustics_Multipier": append values 1.000000
+ "VRay_MoBlur_DefaultGeomSamples": append values True
+ "VRay_Matte_Enable": append values False
+ "VRay_Matte_Alpha": append values 1.000000
+ "VRay_Matte_Shadows": append values False
+ "VRay_Matte_ShadowAlpha": append values False
+ "VRay_Matte_ShadowColor": append values [0,0,0]
+ "VRay_Matte_ShadowBrightness": append values 1.000000
+ "VRay_Matte_ReflectionAmount": append values 1.000000
+ "VRay_Matte_RefractionAmount": append values 1.000000
+ "VRay_Matte_GIAmount": append values 1.000000
+ "VRay_Matte_GI_OtherMattes": append values True
+ "VRay_GI_SurfaceID": append values 0
+ "VRay_GI_VisibleToGI": append values True
+ "VRay_GI_VisibleToReflections": append values True
+ "VRay_GI_VisibleToRefractions": append values True
+ "VRay_Secondary_Matte_Enable": append values False
+ for n in curSel where isProperty n property do
+ append values (getProperty n property)
+ append values n.layer.name
+ fn isAllPropsSame values:#() =
+ if values[1] != v do return false
+ fn calcState property:undefined type:#node =
+ if selection.count >= 1 then
+ -- collect array of property values
+ local tmpValues = CollectPropertyValues property:property type:type
+ -- check to see if all property values are the same
+ local match = isAllPropsSame values:tmpValues
+ -- 0 = false / 1 = true / 2 = indeterminate
+ --if they all match return its value
+ -- if they don't all match then return 'indeterminate'
+ return "mismatch" --intermediate result
+ fn SetUIControl ctrl: value: =
+ if classof value == BooleanClass do
+ if classof ctrl == CheckBoxControl do ctrl.triState = 0
+ if classof ctrl == SpinnerControl do ctrl.indeterminate = false
+ if classof ctrl == CheckBoxControl do ctrl.triState = 1
+ if classof ctrl == SpinnerControl do ctrl.indeterminate = false
+ if classof value == Integer do
+ if classof ctrl == SpinnerControl do ctrl.value = value
+ if classof value == Float do
+ if classof ctrl == SpinnerControl do ctrl.value = value
+ if classof value == string AND value != "mismatch" do
+ if classof ctrl == EditTextControl do ctrl.text = value
+ -- ALL INDETERMINATE ACTIONS
+ if value == "mismatch" do
+ if classof ctrl == CheckBoxControl do ctrl.triState = 2
+ if classof ctrl == SpinnerControl do ctrl.indeterminate = true
+ if classof ctrl == EditTextControl do ctrl.text = ""
+ fn EnableUI state:(selection.count >=1) =
+ rlNodeProperties.controls.enabled = state
+ --## check/compare settings for selected nodes Object Properties
+ results_layer = calcState type:#layer
+ results_renderable = calcState property:#renderable
+ results_inheritVisibility = calcState property:#inheritVisibility
+ results_primaryVisibility = calcState property:#primaryVisibility
+ results_secondaryVisibility = calcState property:#secondaryVisibility
+ results_receiveShadows = calcState property:#receiveShadows
+ results_castShadows = calcState property:#castShadows
+ results_applyAtmospherics = calcState property:#applyAtmospherics
+ results_renderOccluded = calcState property:#renderOccluded
+ results_ObjectID = calcState property:#gBufferChannel
+ --## check Vray Properties
+ results_VRayMatteEnable = calcState property:"VRay_Matte_Enable" type:#vray
+ results_VRaySecondaryMatteEnable = calcState property:"VRay_Secondary_Matte_Enable" type:#vray
+ results_VRayMatteAlpha = calcState property:"VRay_Matte_Alpha" type:#vray
+ results_VRayMatteShadows = calcState property:"VRay_Matte_Shadows" type:#vray
+ results_VRayMatteShadowAlpha = calcState property:"VRay_Matte_ShadowAlpha" type:#vray
+ results_VRayMatteReflectionAmount = calcState property:"VRay_Matte_ReflectionAmount" type:#vray
+ results_VRayMatteRefractionAmount = calcState property:"VRay_Matte_RefractionAmount" type:#vray
+ results_VRayMatteGIAmount = calcState property:"VRay_Matte_GIAmount" type:#vray
+ results_VRayMatteGIOtherMattes = calcState property:"VRay_Matte_GI_OtherMattes" type:#vray
+ --## set the state of the UI Controls
+ SetUIControl ctrl:uiLayerName value:results_layer
+ SetUIControl ctrl:uiRenderable value:results_renderable
+ SetUIControl ctrl:uiInheritVisibility value:results_inheritVisibility
+ SetUIControl ctrl:uiVisibleToCamera value:results_primaryVisibility
+ SetUIControl ctrl:uiVisibleToReflectionRefraction value:results_secondaryVisibility
+ SetUIControl ctrl:uiReceiveShadows value:results_receiveShadows
+ SetUIControl ctrl:uiCastShadows value:results_castShadows
+ SetUIControl ctrl:uiApplyAtmospherics value:results_applyAtmospherics
+ SetUIControl ctrl:uiRenderOccludedObjects value:results_renderOccluded
+ SetUIControl ctrl:uiObjectID value:results_ObjectID
+ SetUIControl ctrl:uiMatteObject value:results_VRayMatteEnable
+ SetUIControl ctrl:uiMatteForReflectionRefraction value:results_VRaySecondaryMatteEnable
+ SetUIControl ctrl:uiAlphaContribution value:results_VRayMatteAlpha
+ SetUIControl ctrl:uiLightShadows value:results_VRayMatteShadows
+ SetUIControl ctrl:uiLightShadowsAffectAlpha value:results_VRayMatteShadowAlpha
+ SetUIControl ctrl:uiReflectionContribution value:results_VRayMatteReflectionAmount
+ SetUIControl ctrl:uiRefractionContribution value:results_VRayMatteRefractionAmount
+ SetUIControl ctrl:uiGiContribution value:results_VRayMatteGIAmount
+ SetUIControl ctrl:uiNoGiOnMattes value:results_VRayMatteGIOtherMattes
+ fn SetVrayUserProps name:"" value:undefined =
+ local curSel = getCurrentSelection()
+ setUserProp n name value
+ menuItem miFloat "Float"
+ menuItem miDockLeft "Dock Left"
+ menuItem miDockRight "Dock Right"
+ try(cui.UnRegisterDialogBar rlNodeProperties)catch()
+ on miDockLeft picked do
+ try(cui.UnRegisterDialogBar rlNodeProperties)catch()
+ cui.registerdialogbar rlNodeProperties style:#(#cui_dock_left, #cui_floatable, #cui_dock_right)
+ cui.dockdialogbar rlNodeProperties #cui_dock_left
+ on miDockRight picked do
+ try(cui.UnRegisterDialogBar rlNodeProperties)catch()
+ cui.registerdialogbar rlNodeProperties style:#(#cui_dock_left, #cui_floatable, #cui_dock_right)
+ cui.dockdialogbar rlNodeProperties #cui_dock_right
+ popupmenu rcOptions pos:mouse.screenpos
+ fn updateHandler event nodes =
+ --format "time:% memory:%\n" (timestamp() - t1) (m1 - heapfree)
+ on uiRenderable changed state do (getCurrentSelection()).renderable = state
+ on uiInheritVisibility changed state do (getCurrentSelection()).inheritVisibility = state
+ on uiVisibleToCamera changed state do (getCurrentSelection()).primaryVisibility = state
+ on uiVisibleToReflectionRefraction changed state do (getCurrentSelection()).secondaryVisibility = state
+ on uiReceiveShadows changed state do (getCurrentSelection()).receiveShadows = state
+ on uiCastShadows changed state do (getCurrentSelection()).castShadows = state
+ on uiApplyAtmospherics changed state do (getCurrentSelection()).applyAtmospherics = state
+ on uiRenderOccludedObjects changed state do (getCurrentSelection()).renderOccluded = state
+ on uiObjectID changed value do (getCurrentSelection()).gbufferchannel = value
+ on uiMatteObject changed state do
+ uiAlphaContribution.value = -1.0
+ SetVrayUserProps name:"VRay_Matte_Alpha" value:-1.0
+ uiAlphaContribution.value = 1.0
+ SetVrayUserProps name:"VRay_Matte_Alpha" value:1.0
+ SetVrayUserProps name:"VRay_Matte_Enable" value:state
+ on uiMatteForReflectionRefraction changed state do SetVrayUserProps name:"VRay_Secondary_Matte_Enable" value:state
+ on uiAlphaContribution changed val do SetVrayUserProps name:"VRay_Matte_Alpha" value:val
+ on uiLightShadows changed state do SetVrayUserProps name:"VRay_Matte_Shadows" value:state
+ on uiLightShadowsAffectAlpha changed state do SetVrayUserProps name:"VRay_Matte_ShadowAlpha" value:state
+ on uiReflectionContribution changed val do SetVrayUserProps name:"VRay_Matte_ReflectionAmount" value:val
+ on uiRefractionContribution changed val do SetVrayUserProps name:"VRay_Matte_RefractionAmount" value:val
+ on uiGiContribution changed val do SetVrayUserProps name:"VRay_Matte_GIAmount" value:val
+ on uiNoGiOnMattes changed state do SetVrayUserProps name:"VRay_Matte_GI_OtherMattes" value:state
+ on rlNodeProperties rbuttonup pt do
+ on rlNodeProperties open do
+ callbackContainer = NodeEventCallback mouseUp:true delay:1 all:UpdateHandler
+ on rlNodeProperties close do
+ callbackContainer.enabled = off
+ callbackContainer = undefined
+createDialog rlNodeProperties 205 515 style:#(#style_SysMenu, #style_ToolWindow)