Material control panel problem

Hi all,
I'm quite new to maxscript and I'm in trouble with a script I'm developing for a personal project.

The script will be applied to a control object, and consist in a simple panel where to change vrayLightMtl multiplier for some other objects in scene.

It works fine in current scene, but if I merge that scene in another one I get an error message ("--unknown property: "multiplier" in undefined").

I think there are some issues with material naming, but as I said I'm new to script :)

Here is the script (for 1st material, others are the same, or maybe not, but this could be another question), and attached you will find a screenshot of materials and panel:

plugin modifier MECHA_Focus_Cristalli
name:"MECHA_Focus_Cristalli"
classID:#(0x133078, 0x54377)
version:1
 
(
 rollout focus "CRISTALLI FOCUS" width:162 height:400
  (
--------DIAMANTE
  label focus_dia_lab "DIAMANTE" pos:[55,8] width:50 height:15		
  slider focus_dia_sli "Off                              On" pos:[14,28] width:136 height:44 range:[0,35,0] type:#integer orient:#horizontal ticks:10 animatable:true controller: sceneMaterials["FOCUS_dia_LUCE"].multiplier.controller
  button focus_dia_CK "Create Key" pos:[5,85] width:65 height:15
  button focus_dia_DK "Delete All Key" pos:[70,85] width:85 height:15
 
  button focus_dia_set_0 "0" pos:[5,100] width:25 height:15
  button focus_dia_set_10 "10" pos:[30,100] width:25 height:15		
  button focus_dia_set_15 "15" pos:[55,100] width:25 height:15
  button focus_dia_set_20 "20" pos:[80,100] width:25 height:15
  button focus_dia_set_25 "25" pos:[105,100] width:25 height:15
  button focus_dia_set_35 "35" pos:[130,100] width:25 height:15
 
  on focus_dia_sli buttondown do
   ( ( animButtonState = True
    addNewKey sceneMaterials["FOCUS_dia_LUCE"].multiplier.controller currentTime ) )
  on focus_dia_sli buttonup do
   animButtonState = False
 
  on focus_dia_CK pressed do
   ( addNewKey sceneMaterials["FOCUS_dia_LUCE"].multiplier.controller currentTime )		
  on focus_dia_DK pressed do
   ( deleteKeys sceneMaterials["FOCUS_dia_LUCE"].multiplier.controller #allKeys )
 
  on focus_dia_set_0 pressed do
   ( sceneMaterials["FOCUS_dia_LUCE"].multiplier.controller.value = 0
    addNewKey sceneMaterials["FOCUS_dia_LUCE"].multiplier.controller currentTime )
  on focus_dia_set_10 pressed do
   ( sceneMaterials["FOCUS_dia_LUCE"].multiplier.controller.value = 10
    addNewKey sceneMaterials["FOCUS_dia_LUCE"].multiplier.controller currentTime )
  on focus_dia_set_15 pressed do
   ( sceneMaterials["FOCUS_dia_LUCE"].multiplier.controller.value = 15
    addNewKey sceneMaterials["FOCUS_dia_LUCE"].multiplier.controller currentTime )
  on focus_dia_set_20 pressed do
   ( sceneMaterials["FOCUS_dia_LUCE"].multiplier.controller.value = 20
    addNewKey sceneMaterials["FOCUS_dia_LUCE"].multiplier.controller currentTime )
  on focus_dia_set_25 pressed do
   ( sceneMaterials["FOCUS_dia_LUCE"].multiplier.controller.value = 25
    addNewKey sceneMaterials["FOCUS_dia_LUCE"].multiplier.controller currentTime )
  on focus_dia_set_35 pressed do
   ( sceneMaterials["FOCUS_dia_LUCE"].multiplier.controller.value = 35
    addNewKey sceneMaterials["FOCUS_dia_LUCE"].multiplier.controller currentTime )
 )
)

Thanks everybody for any help!!

AttachmentSize
materials_01.jpg166.37 KB
panel_01.jpg17.26 KB

Comments

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
ste's picture

GREAT!

Thanks man,
your script works very well, you gave me a big big help :)

I modified it a little...just to complicate my life...

- "DELETE ALL KEY" now put value to zero
- I added a slider with automatic keyframing on currentTime
- I also added buttons to add exact value keyframe on currentTime

Did I worked well?

try(destroyDialog ::focus)catch()
rollout focus "CRISTALLI FOCUS"
(
	fn createKey mtlname: curtime: value: deleteAllKeys:off=
	(
		material = (getClassInstances VRayLightMtl target:rootScene)
		if material.count != 0 do
		(
			for m in material where m.name == mtlname do
			(
				if deleteAllKeys then deleteKeys m.multiplier.controller #allKeys else
				(
					with animate on at time curtime (m.multiplier = value)
				)
			) ; free material
		)
	)
 
/*	label focus_dia_lab "                DIAMANTE" pos:[5,5] width:150 height:15	style_sunkenedge:on
	label focus_dia_label "Materiak Name:" pos:[5,25] width:150 height:15
	edittext focus_dia_name "" pos:[1,40] width:154 height:17 text:"FOCUS_dia_LUCE"
	spinner focus_dia_time "Frame:        " pos:[5,60] range:[-1e9,1e9,0] type:#integer fieldwidth:80
	spinner focus_dia_value "Multiplier:    " pos:[5,80] range:[-1e9,1e9,0] fieldwidth:80
	button focus_dia_CK "Create Key" pos:[5,100] width:65 height:18
	button focus_dia_DK "Delete All Key" pos:[70,100] width:85 height:18
 
	label focus_vis_lab "                VISORE" pos:[5,125] width:150 height:15	style_sunkenedge:on
	label focus_vis_label "Materiak Name:" pos:[5,145] width:150 height:15
	edittext focus_vis_name "" pos:[1,160] width:154 height:17 text:"FOCUS_vis_LUCE"
	spinner focus_vis_time "Frame:        " pos:[5,180] range:[-1e9,1e9,0] type:#integer fieldwidth:80
	spinner focus_vis_value "Multiplier:    " pos:[5,200] range:[-1e9,1e9,0] fieldwidth:80
	button focus_vis_CK "Create Key" pos:[5,220] width:65 height:18
	button focus_vis_DK "Delete All Key" pos:[70,220] width:85 height:18
*/
 
	label focus_cri_lab "                CRISTALLI" pos:[5,245] width:150 height:15	style_sunkenedge:on
	label focus_cri_label "Materiak Name:" pos:[5,265] width:150 height:15
	edittext focus_cri_name "" pos:[1,280] width:154 height:17 text:"FOCUS_cri_LUCE"
	spinner focus_cri_time "Frame:        " pos:[5,300] range:[-1e9,1e9,0] type:#integer fieldwidth:80
	spinner focus_cri_value "Multiplier:    " pos:[5,320] range:[-1e9,1e9,0] fieldwidth:80
	button focus_cri_CK "Create Key" pos:[5,340] width:65 height:18
	button focus_cri_DK "Delete All Key" pos:[70,340] width:85 height:18
 
-------------------------------------
----EXPERIMENT-----------------
-------------------------------------
 
	slider focus_cri_sli "Off                              On" pos:[14,360] width:136 height:44 range:[0,35,0] type:#integer orient:#horizontal ticks:10 animatable:true value:focus_cri_sli.value
 
	button focus_cri_set_0 "0" pos:[5,420] width:25 height:15
	button focus_cri_set_10 "10" pos:[30,420] width:25 height:15		
	button focus_cri_set_15 "15" pos:[55,420] width:25 height:15
	button focus_cri_set_20 "20" pos:[80,420] width:25 height:15
	button focus_cri_set_25 "25" pos:[105,420] width:25 height:15		
	button focus_cri_set_35 "35" pos:[130,420] width:25 height:15		
 
	on focus_cri_sli buttondown do
	(	
		animButtonState = True
 
	)
	on focus_cri_sli buttonup do
	(
		createKey mtlname:focus_cri_name.text curtime:currentTime value:focus_cri_sli.value
			animButtonState = False
	)
 
	on focus_cri_set_0 pressed do
	(	createKey mtlname:focus_cri_name.text curtime:currentTime value:0	)
	on focus_cri_set_10 pressed do
	(	createKey mtlname:focus_cri_name.text curtime:currentTime value:10	)
	on focus_cri_set_15 pressed do
	(	createKey mtlname:focus_cri_name.text curtime:currentTime value:15	)
	on focus_cri_set_20 pressed do
	(	createKey mtlname:focus_cri_name.text curtime:currentTime value:20	)
	on focus_cri_set_25 pressed do
	(	createKey mtlname:focus_cri_name.text curtime:currentTime value:25	)	
	on focus_cri_set_35 pressed do
	(	createKey mtlname:focus_cri_name.text curtime:currentTime value:35	)
 
-------------------------------------
----EXPERIMENT END_----------
-------------------------------------
 
/* 
	on focus_dia_CK pressed do
	(
		createKey mtlname:focus_dia_name.text curtime:focus_dia_time.value value:focus_dia_value.value
	)
	on focus_dia_DK pressed do
	(
		createKey mtlname:focus_dia_name.text deleteAllKeys:on
	)
	on focus_vis_CK pressed do
	(
		createKey mtlname:focus_vis_name.text curtime:focus_vis_time.value value:focus_vis_value.value
	)
	on focus_vis_DK pressed do
	(
		createKey mtlname:focus_vis_name.text deleteAllKeys:on
	)
*/
	on focus_cri_CK pressed do
	(
		createKey mtlname:focus_cri_name.text curtime:focus_cri_time.value value:focus_cri_value.value
	)
	on focus_cri_DK pressed do
	(
		createKey mtlname:focus_cri_name.text deleteAllKeys:on
		createKey mtlname:focus_cri_name.text curtime:0 value:0
	)
)
createdialog focus 160 440 10 110 style:#(#style_titlebar, #style_sysmenu, #style_toolwindow)

(I commented first two materials just to made things easier)

barigazy's picture

...

Yep. You complicate your life with a slider.
I will probably use Checkbutton control

checkbutton cb_animstate "Animate On/Off" highlightColor:[150,20,20]
on cb_animstate changed state do animButtonState = state

barigazy

ste's picture

.

Yes, but I like hard things, and with autokey I can save a lot of clicks :)

Maybe, do you know how to set In/Out Tangents to AUTO for created keys?

I tried with inTangentType = #auto but with no luck!

barigazy's picture

...

For first key do this or loop trought all keys

meditMaterials[1].multiplier.controller.keys[1].inTangentType = #auto
meditMaterials[1].multiplier.controller.keys[1].outTangentType = #auto

barigazy

ste's picture

.

Thanks, tomorrow I will try!

barigazy's picture

...

That's all you need. If you change name of material in Material Editor or Slate
then use same name in the script.
Code is not tested but you can extend my concept.
Cheers!

barigazy

ste's picture

:)

Very nice idea!!

It give me an error and it does not create keyframes, but maybe now it's time to go to sleep and retry tomorrow morning.

Stay tuned :)

And obviously thank you very much!

barigazy's picture

...

Just post error message from listener

barigazy

barigazy's picture

...

I fixed the code by testing these tree materials which are nested inside Multimaterial, VrayBlendMtl and VRay2Side. Also works inside other materials also.Check again my last code.
Cheers!

barigazy

ste's picture

...

Nice script,
quite complicated to understand for me, but I'll try.

The updated version works fine, it shows me all vraylightmtl in the scene... but my script continue to give me the error, ahahh!

Another way I tried was to add variables for material name, something like this:

(
 local RABdia = scenematerials["RABBIT_diamante"].coatMtl[1]
 local RABvis = scenematerials["RABBIT_visore"].coatMtl[1]
 local RABcri = ???????
 
 rollout rabbit "CRISTALLI RABBIT" width:162 height:400
 (
  label rabbit_dia_lab "DIAMANTE" pos:[55,8] width:50 height:15		
  slider rabbit_dia_sli "Off                              On" pos:[14,28] width:136 height:44 range:[0,35,0] type:#integer orient:#horizontal ticks:10 animatable:true controller: RABdia.multiplier.controller
 
...
 )
)

It works fine for VISORE and DIAMANTE, that are vrayBlendMtl, but no way to make CRISTALLI to work, because this is a vrayBlendMtl in a MultiSubobjMaterial.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.