Mostly Harmless

Legacy:PerformCreateUTSet.Mel

From Unreal Wiki, The Unreal Engine Documentation Site
Jump to: navigation, search

This is a little MEL script I wrote to help me prepare static meshes for export from Maya PLE with unEditor. It appears that unEditor doesn't support the Scale parameter that all the old howtos say it does (broke in 4.5?) but it supports the group to a limited extent (without a group it generates sequential bogus group numbers). A lot of this code is stolen from performCreateSet.mel and a few other built in scripts.

performCreateUTSet.mel:

proc setOptionVars (int $forceFactorySettings)
{
	// The variables in this "option" box are not options		   
}
 
global proc performCreateUTSetSetup (string $parent, int $forceFactorySettings)
{
	setParent $parent;
 
	textFieldGrp -edit -tx "myLevel" createUTSetPackage;
	textFieldGrp -edit -tx "" createUTSetGroup;
	textFieldGrp -edit -tx "" createUTSetMesh;
}
 
global proc performCreateUTSetCallback (string $parent, int $doIt)
{
	setParent $parent;
 
	if ($doIt) {
		performCreateUTSet 0;
		addToRecentCommandQueue "performCreateUTSet 0" "CreateUTSet";
	}
}
 
global proc createUTSetOptions ()
{
	string $commandName = "performCreateUTSet";
	string $callback = ($commandName + "Callback");
	string $setup = ($commandName + "Setup");
 
	string $layout = getOptionBox();
	setParent $layout;
	setUITemplate -pushTemplate DefaultTemplate;
	waitCursor -state 1;
 
	string $parent = `columnLayout -adjustableColumn 1`;
 
	textFieldGrp -label "Package" -tx "myLevel" createUTSetPackage;
	textFieldGrp -label "Group" -tx "" createUTSetGroup;
	textFieldGrp -label "Name" -tx "" createUTSetMesh;
 
	setUITemplate -popTemplate;
 
	string $applyBtn = getOptionBoxApplyBtn();
	button -edit -label "CreateUTSet"
	       -command ($callback + " " + $parent + " " + 1)
		$applyBtn;
	string $saveBtn = getOptionBoxSaveBtn();
	button -edit 
		-command ($callback + " " + $parent + " " + 0 + "; hideOptionBox")
		$saveBtn;
	string $resetBtn = getOptionBoxResetBtn();
	button -edit 
		-command ($setup + " " + $parent + " " + 1)
		$resetBtn;
 
	setOptionBoxTitle("Crete UT Set Options");
 
	waitCursor -state 0;
 
	setOptionBoxHelpTag( "createUTSet" );
 
	eval (($setup + " " + $parent + " " + 0));      
	showOptionBox();
}
 
 
proc string assembleCmd()
{
	string $SMName = `textFieldGrp -q -text createUTSetMesh`;
	string $PackName = `textFieldGrp -q -text createUTSetPackage`;
	string $GrpName = `textFieldGrp -q -text createUTSetGroup`;
 
	string $cmd = "";
 
	$cmd += "$createUTSetResult = `sets -name "+$SMName+"`;";
	$cmd += "addAttr -ln package -dt \"string\" "+$SMName+";";
	$cmd += "addAttr -ln group -dt \"string\" "+$SMName+";";
	$cmd += "setAttr -type \"string\" "+$SMName+".package \""+$PackName+"\";";
	$cmd += "setAttr -type \"string\" "+$SMName+".group \""+$GrpName+"\";";
 
	return $cmd;
}
 
global proc string performCreateUTSet(int $action)
{
	string $cmd = "";
 
	switch ($action) {
 
		//	Execute the command.
		//
		case 0:
			//	Get the command.
			//
			$cmd = `assembleCmd`;
 
			//	Execute the command with the option settings.
			//
			evalEcho($cmd);
 
			break;
 
		//	Show the option box.
		//
		case 1:
			createUTSetOptions;
			break;
 
		//	Return the command string.
		//
		case 2:
			//	Get the command.
			//
			$cmd = `assembleCmd`;
			break;
	}
	return $cmd;
}

To install this script, paste the text into a file (Notepad works) and save it as performCreateUTSet.mel in C:\Program Files\AliasWavefront\Maya 4.5 Personal Learning Edition\scripts\other. To make a shelf button to run it, type "performCreateUTSet 1" in the command bar at the bottom left of the main window and then open up the script editor window (button to the right of the script output bar). Select the command from the upper pane of the script editor and either left or middle drag it to the shelf. To set a key to run it open the key mapper and assign "performCreateUTSet 1" to a key.

Related Topics[edit]

Discussion[edit]

Tarquin: what's a mel script?

Mychaeel: Given the link context I added, I expect it's some sort of import/export script for Maya.  :-)

inio: Tarquin: MEL is Maya's internal scripting language. Mychaeel: Thanks for adding the context. I just wanted to get this posted once I had it working last night.

MythOpus: Please Ignore The Fact that I have no Idea how to work Maya, but what does the script do?

inio: It automates the process of creating a set, adding "package" and "group" attributes to it, and setting those attributes. This normally requires about 10 clicks, a few menu selects, and typing in "package" and "group" (every time you want to set up a new mesh). Using this script it takes 3-5 clicks, and no unnecessary typing.

Beckett: This script is really excellent. I've been trying to modify it to automate the 'Scale' property as well, but I guess I don't know enough about datatypes in MEL. For the life of me, I can't get this line to work:

   $cmd += "setAttr -type double "+$SMName+".scale 50;";

No matter what '-type' I try (double, long, short, integer, etc.) it tells me 'this is not a recognized type'. "String" works, of course, but then the value isn't recognized in UnrealED.