Home Coding, Scripting, Shaders
The BRAWL² Tournament Challenge has been announced!

It starts May 12, and ends Oct 17. Let's see what you got!

https://polycount.com/discussion/237047/the-brawl²-tournament

[3ds max] How to get rollout from interface?

I’m trying to write a script to override the material on a Redshift proxy.
I can’t access the proxy material from the proxy rollout.
I’m stuck at this point — any help would be appreciated.



attach script here:
macroScript RS_Proxy_Overdrive
	category:"Hihead"
	toolTip:"RS_Proxy_Overdrive"
	ButtonText:"RS_Proxy_Overdrive"
-- 	version:0
(	
	local selID = #MyRollout_SelectionChanged
	try destroydialog(RS_Proxy_Overdrive)catch()
	rollout RS_Proxy_Overdrive "RS_Proxy_Overdrive" width:180 height:385
	(
		local prefix = "prefix_"
		
		fn findDuble matname =(
			dubmat = undefined
			for m in sceneMaterials where classof m == Multimaterial do(
				for s=1 to m.numsubs do(
					if m[s] != undefined and m[s].name == matname do
					(
						dubmat = m[s]
						exit
					)
				)
			)
			dubmat
		)
		
		fn updateUI =
		(
			if selection.count == 0 then(
				RS_Proxy_Overdrive.lblSel.text = "No selection"
				RS_Proxy_Overdrive.dncText.Text = ""
			)else(
				if classof selection[1] != proxy then(
					RS_Proxy_Overdrive.lblSel.text = "Not Proxy"
					RS_Proxy_Overdrive.dncText.Text = ""
				)else(
					local existMat = ""
					local prefix = RS_Proxy_Overdrive.et_prefix.text
					if selection[1].material != undefined and classof selection[1].material == Multimaterial then(
						local m = selection[1].material
						for i=1 to m.numsubs do
						(
							local sm = m[i]
							if sm != undefined do (existMat =existMat + (substring sm.name (prefix.count+1) sm.name.count) + "")
						)
					)
					RS_Proxy_Overdrive.lblSel.text = ("Selected: " + selection[1].name)
					RS_Proxy_Overdrive.dncText.Text = existMat
				)
			)
		)
		label lblSel "No selection"
		group "Proxy Material"
		(
		dotNetControl dncText "System.Windows.Forms.Textbox" width:165 height:170		align:#center
		)
		group "Setting"
		(
			edittext et_prefix "Prefix mat:" text:prefix
			checkbox ch_instance "Assign to instance" checked:true
			checkbox ch_uniqueMat "Unique Mat for proxy" checked:false
			checkbox ch_hide "Hide After"
			materialbutton bnmtl_tmp "Select material"
		)
		button bn_start "Apply to selection" enabled:false
		
		on RS_Proxy_Overdrive open do
		(
			updateUI()
			callbacks.removeScripts id:selID
			callbacks.addScript #selectionSetChanged "try(RS_Proxy_Overdrive.updateUI())catch()" id:selID
			dncText.AcceptsReturn = true;
			dncText.AcceptsTab = true;
			dncText.WordWrap = false;
			dncText.Multiline = true;
			dncText.ScrollBars = dncText.ScrollBars.Vertical;
	 		
		)
		on RS_Proxy_Overdrive close do
		(
			callbacks.removeScripts id:selID
		)
		on et_prefix changed state do(
			updateUI()
		)
		on bnmtl_tmp picked mtl do(
			bnmtl_tmp.text = mtl.name
			bn_start.enabled=true
		)
		on dncText keydown pressedKey do
		(
			if (pressedKey.keyvalue == 13) do dncText.paste("");
		)
		on bn_start pressed do(
			local PR = selection[1]
			if classof PR ==proxy then(
				local tmat = bnmtl_tmp.material
				local RSprefix = et_prefix.text
				local RSMatsString = dncText.Text
				local instanceNodes = for obj in objects where classof obj == proxy and obj.file == PR.file collect obj
				local RSMatsArr = for str in (filterString RSMatsString "") collect (RSprefix+str)
				local RSOvverideMat = Multimaterial name:PR.name numsubs:RSMatsArr.count
				for i=1 to RSMatsArr.count do(
					local dubSubmat = undefined
					local submat = copy tmat
					submat.name = RSMatsArr[i]
					if ch_uniqueMat.state !=true then(dubSubmat = findDuble (submat.name))
					if dubSubmat!=undefined then(
						replaceInstances dubSubmat submat
						RSOvverideMat[i] = submat
					)
					else
					(
						RSOvverideMat[i] = submat
					)
				)
				if instanceNodes.count!=0 then(
					for obj in instanceNodes do
					(
					obj.material = RSOvverideMat
					obj.materialmode=2
					obj.namematchprefix = RSprefix
					)
				)
				if ch_hide.state == true then hide instanceNodes
			)
		)
	)
	createdialog RS_Proxy_Overdrive
)
Sign In or Register to comment.