MAXSCRIPT: option box


#1

whats the command/how-to to get that option box next to a command in a quadmenu. i.e.

im doin a little script for myself and this would be very helpful.

thanks for any assistance


#2

You just have to write your macro with the <on altExecute type do> command

for exemple:

macroScript Mysupascript
buttonText:“supascript”
category:“Mine”
toolTip:“works fine”

(
on altExecute type do

                               ( rollout....
                               )

)


#3

thank you


#4

this is what i hav thus far:

–start script–

macroscript PolyCube
category:“Polygon Objects”

(
Box lengthsegs:1 widthsegs:1 heightsegs:1 length:10 width:10 height:10 mapCoords:off pos:[0,0,0] isSelected:on

on altExecute type do
(print "hello"
	)

)
–end script–

the altExecute works and when i hit it, it prints hello. but if i just choose the polycube int the quad, it says max runtime error, no such handler #Execute.

i’ll research it on my own, but if anyone knows the prob off hand i would appriciate it.

thanks


#5

ok, i fixed that part.
–start script–
macroscript PolyCube
category:“Polygon Objects”

(
on execute do
(
Box lengthsegs:1 widthsegs:1 heightsegs:1 length:10 width:10 height:10 mapCoords:off pos:[0,0,0] isSelected:on
)

on altExecute type do
(rollout hello "hello"

editText hello "hello" pos:[15,28] width:113 height:46

gw = newRolloutFloater 300 200
addNewRollout hello gw
	)

)
–end script–

now i can get the popup box with the rollout in it. but i havent put anythin in the rollout. when i try to add an edittext thing, it says:

– Type error: Call needs function or class, got: undefined
– Syntax error: at ), expected <factor>
– In line: )

i hav no clue what its talkin bout. again i will research it on my own.

thanks again


#6

No big troubles, just several little mistakes

the rollout command must be between ()

rollout …
(
edittext…
) — end of rollout

and… addrollout (I don’t think the addNewrollout command exist, got an error message)

so try something like this:


macroscript PolyCube
category:“Polygon Objects”

(
on execute do
(
Box lengthsegs:1 widthsegs:1 heightsegs:1 length:10 width:10 height:10 mapCoords:off pos:[0,0,0] isSelected:on
)

on altExecute type do
(
rollout hello “hello”
(
editText Text “hello” pos:[15,28] width:113 height:46
)

gw = newRolloutFloater “Polycube” 300 200
addRollout hello gw

)
)

it should works

Hope it helps


#7

thanks, it worked like a champ, ive run into another prob, but i will research a little more before buggin u guys

thanks for ur help


#8

ok, i have an apply button in the option box:

–start script–

macroscript PolyCube
category:“Polygon Objects”

(
on execute do
(
Box lengthsegs:1 widthsegs:1 heightsegs:1 length:10 width:10 height:10 mapCoords:off pos:[0,0,0] isSelected:on
)
–define altExecute rollout–
on altExecute type do
(
rollout hello “hello”
(
edittext length “Length” pos:[40,8] width:110 height:20
edittext width “Width” pos:[40,32] width:110 height:20
edittext height “Height” pos:[40,56] width:110 height:20
edittext lengthSegs “Length Segs” pos:[40,88] width:110 height:20
edittext widthSegs “Width Segs” pos:[40,112] width:110 height:20
edittext heightSegs “Height Segs” pos:[40,136] width:110 height:20
button apply “Apply”
)

gw = newRolloutFloater  "Polycube" 300 200
addRollout hello gw
)

--define event handlers for roolout--
on length entered newLenght do
(
length = newLength
)
on width entered newWidth do
(
width = newWidth
)
on apply pressed do
(
Box lengthsegs:1 widthsegs:1 heightsegs:1 length:newLength width:newWidth height:10 mapCoords:off pos:[0,0,0] isSelected:on

)

)

–end script–

when i press the apply button, nothing happens, the recorder doesnt even respond. so i figure theres gotta be a problem in the script. is the event handler for when the user enters text correct? and am i referencing it properly in the apply button eventhandler?

im a newb at this, this is a pretty pointless script, more of a learning excercise than anything else.

thanks for any help


#9

hi,

I think you need to create some locals. But I still only a learner so I’m not sure.

Anyway I’ve created a script a while back which does a simular thing, it works best if you use the quad menu in expert mode alot.

have a look.

Carl


#10

Hi, here is a general layout to follow:

macroscript someName category:“Some Category”
(

on isVisible return someBooleanExpression --optional, return true when item should be visible!
on isChecked return someBooleanExpression --optional, return true when item should be checked!
on isEnabled return someBooleanExpression --optional, return false when item should be greyed out!

on execute do
(
–your main code here
)

on altExecute do
(

rollout someRollout “Rollout”
(

button someButton “Button”

–NOTE: The button handler IS PART OF THE ROLLOUT definition!
on someButton pressed do …

)–end rollout

–CreateDialog usually looks better than a Floater…
createDialog someRollout 200 200

)–end altExecute

)–end macroScript


#11

As Bobo suggests, a dialog is prettier than a rollout floater. I just want to add a tip from my own little bag of tricks. When you declare your dialog, try using this construct:

createDialog someRollout someRollout.width someRollout.height

This allows you to redefine the width and height of the rollout without having to remember to update the createDialog statement as well. So it’s a bit of a timesaver:)

RH


#12

thanks bobo, that did the trick.

so now i have the script to do what i want, if all values are entered in the appropriate edittext boxes. but if they are not, then it just read the global variables for each. this wouldnt be so bad, if i could keep those values displayed in their editext boxes. i thought of doing an if then else statement, but ran into some problems.

i cant declare a variable in the if statement that references the entered text for that edittext box. man i hope this is making sense. basically what i want it to do is each edittext be given a default value and store that as newLength, etc. then if the user enters a new value, then the variable newLength will be given the newly entered value. then hit the apply button and presto, u have your object with parameters entered. basically what maya has for each of its objects. seems like it should be easy enough to accomplish.

this is what i have so far

–start script–
macroscript PolyCube
category:“Polygon Objects”

(
on execute do
(
Box lengthsegs:1 widthsegs:1 heightsegs:1 length:10 width:10 height:10 mapCoords:off pos:[0,0,0] isSelected:on
)
–define altExecute rollout–
on altExecute type do
(

rollout hello "hello"
	(
	edittext length "Length" text:"10" pos:[40,8] width:110 height:20
	edittext width "Width" pos:[40,32] width:110 height:20
	edittext height "Height" pos:[40,56] width:110 height:20
	edittext lengthSegs "Length Segs" pos:[40,88] width:110 height:20
	edittext widthSegs "Width Segs" pos:[40,112] width:110 height:20
	edittext heightSegs "Height Segs" pos:[40,136] width:110 height:20
	button apply "Apply"
	
	--define event handlers for rollout--
		
		global initLength = length.text
		
		on length entered text do
		(
		global newLength = length.text as float
		)			
		on width entered text do
		(
		global newWidth = width.text as float
		)
		on height entered text do
		(
		global newHeight = height.text as float
		)
		on lengthSegs entered text do
		(
		global newLengthSegs = lengthSegs.text as float
		)
		on widthSegs entered text do
		(
		global newWidthSegs = widthSegs.text as float
		)
		on heightSegs entered text do
		(
		global newHeightSegs = heightSegs.text as float
		)
		on apply pressed do
		(
		Box lengthsegs:newLengthSegs widthsegs:newWidthSegs heightsegs:newHeightSegs length:newLength width:newWidth height:newHeight mapCoords:off pos:[0,0,0] isSelected:on
		)
	)
	
createDialog hello 400 400
)

)
–end script–


#13

Holy Crap it works!

–script–

– Adds the Maya option box
– to Polygon Primatives

macroScript PolyCube
category:“Polygon Objects”

(
global newLength = 10
global newWidth = 10
global newHeight = 10
global newLengthSegs = 1
global newWidthSegs = 1
global newHeightSegs = 1

on execute do
(
Box lengthsegs:1 widthsegs:1 heightsegs:1 length:10 width:10 height:10 mapCoords:off pos:[0,0,0] isSelected:on
macros.run "Modifier Stack" "Convert_to_Poly"
)
--define altExecute rollout--
on altExecute type do
(
	


rollout cube "cube" width:268 height:159
(
	edittext edLength "Length" text:(newLength as string)pos:[27,35] width:109 height:20
	edittext edWidth "Width  " text:(newWidth as string)pos:[26,59] width:110 height:20
	edittext edHeight "Height" text:(newHeight as string)pos:[29,83] width:107 height:20
	edittext edLengthSegs "Length Segs " text:(newLengthSegs as string)pos:[163,35] width:90 height:20
	edittext edWidthSegs "Width Segs " text:(newWidthSegs as string)pos:[168,59] width:85 height:20
	edittext edHeightSegs "Height Segs" text:(newHeightSegs as string)pos:[168,83] width:85 height:20
	button apply "Apply" pos:[20,117] width:66 height:21
	button ok "OK" pos:[101,117] width:66 height:21
	button cancel "Cancel" pos:[182,117] width:66 height:21
	GroupBox lblParam "Parameters" pos:[4,4] width:260 height:149
	
	--define event handlers for rollout--
	
	on edLength entered text do
	(
	global newLength = edLength.text as float
	)
	on edWidth entered text do
	(
	global newWidth = edWidth.text as float
	)
	on edHeight entered text do
	(
	global newHeight = edHeight.text as float
	)
	on edLengthSegs entered text do
	(
	global newLengthSegs = edLengthSegs.text as float
	)
	on edWidthSegs entered text do
	(
	global newWidthSegs = edWidthSegs.text as float
	)
	on edHeightSegs entered text do
	(
	global newHeightSegs = edHeightSegs.text as float
	)
	on apply pressed do
	(
	Box lengthsegs:newLengthSegs widthsegs:newWidthSegs heightsegs:newHeightSegs length:newLength width:newWidth height:newHeight mapCoords:off pos:[0,0,0] isSelected:on
	macros.run "Modifier Stack" "Convert_to_Poly"
	)
	on ok pressed do
	(
	Box lengthsegs:newLengthSegs widthsegs:newWidthSegs heightsegs:newHeightSegs length:newLength width:newWidth height:newHeight mapCoords:off pos:[0,0,0] isSelected:on
	macros.run "Modifier Stack" "Convert_to_Poly"
	destroyDialog cube
	)
	on cancel pressed do
	(
	destroyDialog cube
	)
	
)	

createDialog cube cube.width cube.height

)

)

–end script–

i kno its probably one of the messiest scripts, but hey, it does the job i need it to do. thanks to orpheo, bobo, and lfshade.

i learned a great deal in this little adventure, now on to the other primatives.


#14

dammit, after looking through Carl’s script, i find that edittext is probably not the best rollout element to use. so i will redo it.

plus his a butt load cleaner than mine.

back to the drawing board :cry:


#15

ok, i rewrote it, using carls script for some reference. i tried not to blatantly rip it off. there is a part in there about using a defualt name in there, i still hav to figure out befor ei can put that in, because now it just gives the object an empty name, just a small thing to correct. but the Cube, Sphere, Plane, Cylinder, and Cone are all done.

anyways, here is the script, hope someone finds at least a little use for it. thanks to carl knight, lfshade, bobo, and orpheo.

Quad Primatives


#16

This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.