bitmap switcher

Another script...another newbie problem!

I'm trying to develop a script that let me change diffuse texture of a certain material.
I started studying Joe Gunn old script "face switcher": this script change material ID (but first we need to create a multiamterial with a lot of submaterials with different textures), while I think it's faster to have only one material and change its texture.
The script let you choose a directory to sort bitmap from, create thumbnails and...nothing.
The scope is to change material texture clicking on the corresponding thumbnail and to create a keyframe for material diffuse slot.

This is my result:

try(destroyDialog ::texchange)catch()
rollout texchange"TEXTURE CHANGE"
 
(	
--interface
	button btnSetD "Set Dir:" pos:[5,5] width:50 height:20 toolTip:"directory immagini"  
	edittext Fdir "" pos:[55,5] width:100 height:20
	button btn01 "01" pos:[5,30] width:30 height:30  
	button btn02 "02" offset:[-30,-35] width:30 height:30
	button btn03 "03" offset:[0,-35] width:30 height:30  
	button btn04 "04" offset:[30,-35] width:30 height:30
	button btn05 "05" offset:[60,-35] width:30 height:30
--choose bitmap path
	on btnSetD pressed do
	(
		local curpath = Fdir.text 
		local newPath = getSavePath initialDir:(curpath) caption:"Select the path where your Face Images are located" 
		if newPath != undefined then	
--create thumbnails
		(
			Fdir.text = newpath
			btn01.images = #(Fdir.text + "\01.png", Fdir.text + "\01.png", 1, 1, 1, 1, 1)
			btn02.images = #(Fdir.text + "\02.png", Fdir.text + "\02.png", 1, 1, 1, 1, 1)
			btn03.images = #(Fdir.text + "\03.png", Fdir.text + "\03.png", 1, 1, 1, 1, 1)
			btn04.images = #(Fdir.text + "\04.png", Fdir.text + "\04.png", 1, 1, 1, 1, 1)
			btn05.images = #(Fdir.text + "\05.png", Fdir.text + "\05.png", 1, 1, 1, 1, 1)
		)
	)
--actions
	on btn01 pressed do
	(	
--and here the problem... load 1st thumbnail image to object material
	)
	on btn02 pressed do
	(	
--same, and so on...
	)	
)
createdialog texchange 160 200 10 110 style:#(#style_titlebar, #style_sysmenu, #style_toolwindow)

I hope to have been clear enought... any idea?

Comments

Comment viewing options

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

...

Try this

on btn03 pressed do if selection.count != 0 do 
(
	if (mtl = selection[1].mat) != undefined do
	(
		mtl = getClassInstances VRayMtl target:mtl
		if mtl.count != 0 do if isKindOf (map = mtl[1].texmap_diffuse) bitmaptex do
		(
			with animate on (map.clipu = 0.4)
			map.clipu.controller.keys[1].inTangentType = map.clipu.controller.keys[1].outTangentType = #step
		)
	)
)

bga

ste's picture

.

Almost right, with your code the 1st keyframe is stepped, while the others are not.

With

map.clipu.controller.keys.inTangentType = map.clipu.controller.keys.outTangentType = #step

works well!

barigazy's picture

...

Yep.
In this example I used first object in selection, first material in array and
of course first key

:)

bga

ste's picture

.

One problem solved, another discovered (::disappointed::)

As a dialog works fine.
Converted into a scripted plugin works too.

But I will have more than one character in my scene and I prefer to use this tool as a modifier: if I apply it to two objects with 2 different material it works, but button thumbnails are the same even if I pick 2 different directories (with different images).

Is a local variable (path) problem?

ste's picture

.

Path names in EditText disappered also...

Now I fix it with:

 parameters main rollout:test (
  Fdir type: #string ui:Fdir animatable:false
)

they are also saved with scene and restored on open....
but no way to fix thumbnails problem :(

Any idea?

barigazy's picture

...

By using below method you can avoid any error.
I hope that you understand what i wrote.
If not then just read mxs help.

bga

ste's picture

.

If I wrote:

	on btn01 pressed do
	(
--texmap_diffuse because of vray material
		$.material.texmap_diffuse.filename = "C:\\test\\01.png"
	)

it works, but obviously is not what I need... it should be something like this:

	on btn02 pressed do
	(
		$.material.texmap_diffuse.filename = btn02.images
	)

but my knowledge stops here...

ste's picture

YEP!

I find a solution... is it the right one?

 on btn01 pressed do
  (
   $.material.texmap_diffuse.filename = (Fdir.text + "\01.png")
  )
barigazy's picture

...

Better use "selection[1]" then "$" sign ei

on btn01 pressed do if selection.count != 0 do
(
   if isKindOf (mtl = selection[1].mat) VRayMtl do
      mtl.texmap_diffuse.filename = (Fdir.text + "\01.png")
)

bga

ste's picture

.

You rock!

Thanks, I'm learning a lot from you in these days.

It works fine with a vraymaterial, but does not work (nor mine do) if vraymtl is a submat of a multimaterial...

Comment viewing options

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