historical/toontown-classic.git/panda/plugins/MayaPandaTool.mel

1363 lines
56 KiB
Text
Raw Normal View History

2024-01-16 11:20:27 -06:00
///////////////////////////////////////////////////////////////////////////////////
// Panda3D Exporter Tool //
// Carnegie Mellon University ETC (Entertainment Technology Center) Panda3D Team //
// Author: Shao Zhang //
// 04/14/2005 //
// //
// This tool will allow an artist to export and view assets directly from maya. //
// //
// To run this mel script, drag and drop it (the .mel file) into your current //
// maya workspace. //
///////////////////////////////////////////////////////////////////////////////////
//
// EDIT HISTORY
//
// 06/26/06: ynjh_jo - Major edits; described in http://panda3d.net/phpbb2/viewtopic.php?t=2503
// 07/03/06: Mark Tomczak (fixermark@gmail.com) - Added "Actor" option to export with -a model option
global proc pandaExporterUI()
{
if ( `window -exists PandaExporter2` )
deleteUI -window PandaExporter2;
string $unit=`currentUnit -q -linear`;
string $unitFull=`currentUnit -q -linear -fullName`;
// Window is locked for image dimensions: 280<38>575
// (add a few pixels to compensate for title bar and borders)
window
-title "Panda Exporter"
-width 280
-height 575
-sizeable 0
PandaExporter2;
// Use a formLayout so you control the overlap of the controls
formLayout
-numberOfDivisions 575
-width 275
-height 550
mainForm;
// First add controls
button
-label "--- E X P O R T ---"
-command "exportButton"
exportButton;
button
-label "Browse"
-enable 0
-command ( "browseForFolder \"texPath\"" )
browseTexPathButton;
button
-label "Browse"
-enable 0
-command ( "browseForFolder \"outputPath\"" )
browseOutputPathButton;
button
-label "..."
-enable 0
-command ( "browseForFile \"outputPath\"" )
browseFilenameButton;
button
-label "Select a file to Pview"
-command "getFile2Pview"
pviewButton;
button
-label "Select a file to EGG"
-command "getFile2Egg"
eggButton;
button
-label "Select a file to BAM"
-command "getFile2Bam"
bamButton;
button
-label "www.panda3d.org"
-command "openBrowser"
webButton;
checkBox
-label "Export selected objects"
-value 0
selectedCB;
checkBox
-label "Double sided faces"
-value 0
bfaceCB;
checkBox
-label "Overwrite if file exists"
-value 1
overwriteCB;
checkBox
-label "Run Pview after export"
-value 0
pviewCB;
radioCollection exportOptionsRC;
radioButton
-label "Mesh"
-select
-onCommand ( "exportOptionsUI" )
chooseMeshRB;
radioButton
-label "Actor"
-onCommand ( "exportOptionsUI" )
chooseActorRB;
radioButton
-label "Animation"
-onCommand ( "exportOptionsUI" )
chooseAnimationRB;
radioButton
-label "Both"
-onCommand ( "exportOptionsUI" )
chooseBothRB;
radioButton
-label "Pose"
-onCommand ( "exportOptionsUI" )
choosePoseRB;
setParent ..; //drop out of exportOptionsRC
radioCollection animationOptionsRC;
radioButton
-label "Full Range"
-enable 0
-onCommand ( "animationOptionsUI" )
chooseFullRangeRB;
radioButton
-label "Custom Range"
-enable 0
-onCommand ( "animationOptionsUI" )
chooseCustomRangeRB;
setParent ..; //drop out of animationOptionsRC
radioCollection outputFileOptionsRC;
radioButton
-label "EGG (ASCII)"
-select
chooseEggRB;
radioButton
-label "BAM (binary)"
-enable 0
chooseBamRB;
radioButton
-label "Both"
chooseEggBamRB;
setParent ..; //drop out of outputFileOptionsRC
radioCollection texPathOptionsRC;
radioButton
-label "Reference textures relative to maya file (default)"
-select
-onCommand ( "texPathOptionsUI" )
chooseDefaultTexPathRB;
radioButton
-label "Reference textures relative to custom path"
-onCommand ( "texPathOptionsUI" )
chooseCustomTexPathRB;
setParent ..; //drop out of texPathOptionsRC
radioCollection outputPathOptionsRC;
radioButton
-label "Export to root directory of source file (default)"
-select
-onCommand ( "outputPathOptionsUI" )
chooseDefaultOutputPathRB;
radioButton
-label "Export to other directory:"
-onCommand ( "outputPathOptionsUI" )
chooseCustomOutputPathRB;
setParent ..; //drop out of outputPathOptionsRC
radioCollection outputFilenameOptionsRC;
radioButton
-label "Use original filename"
-select
-onCommand ( "outputFilenameOptionsUI" )
chooseOriginalFilenameRB;
radioButton
-label "Use alternate filename"
-onCommand ( "outputFilenameOptionsUI" )
chooseCustomFilenameRB;
setParent ..; //drop out of outputFilenameOptionsRC
radioCollection transformModeRC;
radioButton
-label "all"
-select
-onCommand ( "transformModeUI" )
chooseTransformAllRB;
radioButton
-label "model/DCS flag"
-onCommand ( "transformModeUI" )
chooseTransformModelRB;
setParent ..; //drop out of transformModeRC
text
-label "Maya Panda Exporter v.1.3 CMU/ETC Panda3D Team"
-font "plainLabelFont"
titleText;
text
-label "Output File Options:"
-font "plainLabelFont"
outputFileOptionsText;
text
-label "Texture Path Options:"
-font "plainLabelFont"
texPathOptionsText;
text
-label "Specify alternate directory:"
-font "plainLabelFont"
customTexPathText;
text
-label "Output directory Options:"
-font "plainLabelFont"
outputPathOptionsText;
text
-label "Specify alternate directory:"
-font "plainLabelFont"
customOutputPathText;
text
-label "Output filename Options:"
-font "plainLabelFont"
outputFilenameOptionsText;
text
-label "Save transform:"
-font "plainLabelFont"
transformModeText;
text
-label ("Convert unit from ( "+$unitFull+" ) to : ")
-align "right"
-font "boldLabelFont"
convertUnitText;
textField
-editable 1
-enable 0
customTexPathTF;
textField
-editable 1
-enable 0
customOutputPathTF;
textField
-editable 1
-enable 0
customFilenameTF;
optionMenu
unitMenu;
menuItem -label "mm";
menuItem -label "cm";
menuItem -label "m";
menuItem -label "km";
menuItem -label "in";
menuItem -label "ft";
menuItem -label "yd";
menuItem -label "nmi";
menuItem -label "mi";
frameLayout
-label "Export Options:"
-font "plainLabelFont"
-labelIndent 2
-collapsable 0
-collapse 0
-borderStyle "etchedOut"
leftFrame;
setParent ..; //drop out of leftFrame
frameLayout
-label ""
-collapsable 0
-collapse 0
-borderStyle "etchedOut"
leftMiddleFrame;
setParent ..; //drop out of leftFrame
frameLayout
-label ""
-collapsable 0
-collapse 0
-borderStyle "etchedOut"
leftBottomFrame;
setParent ..; //drop out of leftFrame
frameLayout
-label "Animation Options:"
-font "plainLabelFont"
-labelIndent 2
-collapsable 0
-collapse 0
-borderStyle "etchedOut"
rightFrame;
columnLayout
-columnAttach "left" 0
-rowSpacing 0
-columnWidth 60
leftFrameColumn;
text -label "\n\n";
text -label "Start Frame:";
textField
-editable 1
-enable 0
-width 108
startFrameTF;
text -label "End Frame:";
textField
-editable 1
-enable 0
-width 108
endFrameTF;
setParent ..; //drop out of leftFrameColumn
setParent ..; //drop out of rightFrame
frameLayout
-label "Extra Tools"
-font "plainLabelFont"
-labelIndent 28
-collapsable 0
-collapse 0
-borderStyle "etchedOut"
extraToolsFrame;
setParent ..; //drop out of extraToolsFrame
frameLayout
-label ""
-collapsable 0
-collapse 0
-borderStyle "etchedIn"
exportButtonFrame;
setParent ..; //drop out of extraToolsFrame
setParent ..; //drop out of "mainForm"
// Now edit the layout of the controls in "mainForm
formLayout -edit
/* text */
-ap titleText "top" 0 2
-ap titleText "left" 0 5
-ap titleText "right" 0 575
-ap outputFileOptionsText "top" 0 188
-ap outputFileOptionsText "left" 0 10
-ap outputFileOptionsText "right" 0 210
-ap texPathOptionsText "top" 0 226
-ap texPathOptionsText "left" 0 10
-ap texPathOptionsText "right" 0 210
-ap customTexPathText "top" 0 280
-ap customTexPathText "left" 0 10
-ap customTexPathText "right" 0 300
-ap outputPathOptionsText "top" 0 324
-ap outputPathOptionsText "left" 0 10
-ap outputPathOptionsText "right" 0 300
-ap customOutputPathText "top" 0 378
-ap customOutputPathText "left" 0 10
-ap customOutputPathText "right" 0 300
-ap convertUnitText "top" 0 165
-ap convertUnitText "left" 0 10
-ap convertUnitText "right" 0 460
-ap outputFilenameOptionsText "top" 0 422
-ap outputFilenameOptionsText "left" 0 10
-ap outputFilenameOptionsText "right" 0 290
-ap transformModeText "top" 0 505
-ap transformModeText "left" 0 10
-ap transformModeText "right" 0 290
/* textfields */
-ap customTexPathTF "top" 0 298
-ap customTexPathTF "left" 0 10
-ap customTexPathTF "right" 0 480
-ap customOutputPathTF "top" 0 396
-ap customOutputPathTF "left" 0 10
-ap customOutputPathTF "right" 0 480
-ap customFilenameTF "top" 0 480
-ap customFilenameTF "left" 0 10
-ap customFilenameTF "right" 0 284
-ap unitMenu "top" 0 160
-ap unitMenu "left" 0 460
/* frames */
-ap leftFrame "top" 0 20
-ap leftFrame "bottom" 0 80
-ap leftFrame "left" 0 4
-ap leftFrame "right" 0 330
-ap leftMiddleFrame "top" 0 80
-ap leftMiddleFrame "bottom" 0 158
-ap leftMiddleFrame "left" 0 4
-ap leftMiddleFrame "right" 0 330
-ap leftBottomFrame "top" 0 158
-ap leftBottomFrame "bottom" 0 188
-ap leftBottomFrame "left" 0 4
-ap leftBottomFrame "right" 0 574
-ap rightFrame "top" 0 20
-ap rightFrame "bottom" 0 158
-ap rightFrame "left" 0 334
-ap rightFrame "right" 0 574
-ap extraToolsFrame "top" 0 425
-ap extraToolsFrame "bottom" 0 542
-ap extraToolsFrame "left" 0 335
-ap extraToolsFrame "right" 0 574
-ap exportButtonFrame "top" 0 542
-ap exportButtonFrame "bottom" 0 573
-ap exportButtonFrame "left" 0 2
-ap exportButtonFrame "right" 0 574
/* checkboxes */
-ap selectedCB "top" 0 82
-ap selectedCB "left" 0 12
-ap bfaceCB "top" 0 101
-ap bfaceCB "left" 0 12
-ap overwriteCB "top" 0 120
-ap overwriteCB "left" 0 12
-ap pviewCB "top" 0 139
-ap pviewCB "left" 0 12
/* exportOptionsRC */
-ap chooseMeshRB "top" 0 21
-ap chooseMeshRB "left" 0 170
-ap chooseActorRB "top" 0 40
-ap chooseActorRB "left" 0 20
-ap chooseBothRB "top" 0 59
-ap chooseBothRB "left" 0 20
-ap chooseAnimationRB "top" 0 40
-ap chooseAnimationRB "left" 0 170
-ap choosePoseRB "top" 0 59
-ap choosePoseRB "left" 0 170
/* animationOptionsRC */
-ap chooseFullRangeRB "top" 0 40
-ap chooseFullRangeRB "left" 0 346
-ap chooseCustomRangeRB "top" 0 59
-ap chooseCustomRangeRB "left" 0 346
/* outputFileOptionsRC */
-ap chooseEggRB "top" 0 205
-ap chooseEggRB "left" 0 10
-ap chooseBamRB "top" 0 205
-ap chooseBamRB "left" 0 196
-ap chooseEggBamRB "top" 0 205
-ap chooseEggBamRB "left" 0 380
/* texPathOptionsRC */
-ap chooseDefaultTexPathRB "top" 0 244
-ap chooseDefaultTexPathRB "left" 0 10
-ap chooseCustomTexPathRB "top" 0 264
-ap chooseCustomTexPathRB "left" 0 10
/* outputPathOptionsRC */
-ap chooseDefaultOutputPathRB "top" 0 342
-ap chooseDefaultOutputPathRB "left" 0 10
-ap chooseCustomOutputPathRB "top" 0 362
-ap chooseCustomOutputPathRB "left" 0 10
/* outputFilenameOptionsRC */
-ap chooseOriginalFilenameRB "top" 0 440
-ap chooseOriginalFilenameRB "left" 0 10
-ap chooseCustomFilenameRB "top" 0 460
-ap chooseCustomFilenameRB "left" 0 10
/* transformModeRC */
-ap chooseTransformAllRB "top" 0 525
-ap chooseTransformAllRB "left" 0 10
-ap chooseTransformModelRB "top" 0 525
-ap chooseTransformModelRB "left" 0 120
/* browseTexPathButton */
-ap browseTexPathButton "top" 0 298
-ap browseTexPathButton "left" 0 485
-ap browseTexPathButton "right" 0 575
/* browseOutputPathButton */
-ap browseOutputPathButton "top" 0 396
-ap browseOutputPathButton "left" 0 485
-ap browseOutputPathButton "right" 0 575
/* browseFilenameButton */
-ap browseFilenameButton "top" 0 480
-ap browseFilenameButton "left" 0 285
-ap browseFilenameButton "right" 0 330
/* extra buttons */
-ap pviewButton "top" 0 445
-ap pviewButton "left" 0 340
-ap pviewButton "right" 0 565
-ap eggButton "top" 0 468
-ap eggButton "left" 0 340
-ap eggButton "right" 0 565
-ap bamButton "top" 0 492
-ap bamButton "left" 0 340
-ap bamButton "right" 0 565
-ap webButton "top" 0 515
-ap webButton "left" 0 340
-ap webButton "right" 0 565
/* exportButton */
-ap exportButton "top" 0 545
-ap exportButton "bottom" 0 570
-ap exportButton "left" 0 8
-ap exportButton "right" 0 565
mainForm; //End of layout
// defining the current unit value
optionMenu -edit -value $unit unitMenu;
showWindow PandaExporter2;
}
//Automatically start the tool
pandaExporterUI();
///////////////////////////////////////////////////////////
// Process: openBrowser //
// Opens the default browser at the panda3d url //
///////////////////////////////////////////////////////////
global proc openBrowser()
{
print "\nGoing to www.panda3d.org...\n";
launch -webPage "www.panda3d.org";
}
///////////////////////////////////////////////////////////
// Process: exportOptionsUI //
// Updates the UI when a radio button is chosen //
///////////////////////////////////////////////////////////
global proc exportOptionsUI()
{
string $selectedRB = `radioCollection -query -select exportOptionsRC`;
switch ($selectedRB)
{
case "chooseMeshRB":
print("Export Mesh Chosen\n");
textField -edit -enable 0 startFrameTF;
textField -edit -enable 0 endFrameTF;
radioButton -edit -enable 0 chooseFullRangeRB;
radioButton -edit -enable 0 chooseCustomRangeRB;
break;
case "chooseActorRB":
print("Export Actor Chosen\n");
textField -edit -enable 0 startFrameTF;
textField -edit -enable 0 endFrameTF;
radioButton -edit -enable 0 chooseFullRangeRB;
radioButton -edit -enable 0 chooseCustomRangeRB;
break;
case "chooseAnimationRB":
print("Export Animation Chosen\n");
radioButton -edit -enable 1 -select chooseFullRangeRB;
radioButton -edit -enable 1 chooseCustomRangeRB;
animationOptionsUI();
break;
case "chooseBothRB":
print("Export Meshes and Animation Chosen\n");
radioButton -edit -enable 1 -select chooseFullRangeRB;
radioButton -edit -enable 1 chooseCustomRangeRB;
animationOptionsUI();
break;
case "choosePoseRB":
print("Export Pose Chosen\n");
textField -edit -enable 1 startFrameTF;
textField -edit -enable 0 endFrameTF;
radioButton -edit -enable 0 chooseFullRangeRB;
radioButton -edit -enable 1 -select chooseCustomRangeRB;
break;
}
}
///////////////////////////////////////////////////////////
// Process: animationOptionsUI //
// Updates the UI when a radio button is chosen //
///////////////////////////////////////////////////////////
global proc animationOptionsUI()
{
string $selectedRB = `radioCollection -query -select animationOptionsRC`;
switch ($selectedRB)
{
case "chooseFullRangeRB":
print("Animation Full Range Chosen\n");
textField -edit -enable 0 startFrameTF;
textField -edit -enable 0 endFrameTF;
break;
case "chooseCustomRangeRB":
print("Animation Custom Range Chosen\n");
textField -edit -enable 1 startFrameTF;
textField -edit -enable 1 endFrameTF;
break;
}
}
///////////////////////////////////////////////////////////
// Process: texPathOptionsUI //
// Updates the UI when a radio button is chosen //
///////////////////////////////////////////////////////////
global proc texPathOptionsUI()
{
string $selectedRB = `radioCollection -query -select texPathOptionsRC`;
switch ($selectedRB)
{
case "chooseDefaultTexPathRB":
print("Default Texture Path Chosen\n");
textField -edit -enable 0 customTexPathTF;
button -edit -enable 0 browseTexPathButton;
break;
case "chooseCustomTexPathRB":
print("Custom Texture Path Chosen\n");
textField -edit -enable 1 customTexPathTF;
button -edit -enable 1 browseTexPathButton;
break;
}
}
///////////////////////////////////////////////////////////
// Process: outputPathOptionsUI //
// Updates the UI when a radio button is chosen //
///////////////////////////////////////////////////////////
global proc outputPathOptionsUI()
{
string $selectedRB = `radioCollection -query -select outputPathOptionsRC`;
switch ($selectedRB)
{
case "chooseDefaultOutputPathRB":
print("Default File Path Chosen\n");
textField -edit -enable 0 customOutputPathTF;
button -edit -enable 0 browseOutputPathButton;
break;
case "chooseCustomOutputPathRB":
print("Custom File Path Chosen\n");
textField -edit -enable 1 customOutputPathTF;
button -edit -enable 1 browseOutputPathButton;
break;
}
}
///////////////////////////////////////////////////////////
// Process: outputFilenameOptionsUI //
// Updates the UI when a radio button is chosen //
///////////////////////////////////////////////////////////
global proc outputFilenameOptionsUI()
{
string $selectedRB = `radioCollection -query -select outputFilenameOptionsRC`;
switch ($selectedRB)
{
case "chooseOriginalFilenameRB":
print("Default Filename Chosen\n");
textField -edit -enable 0 customFilenameTF;
button -edit -enable 0 browseFilenameButton;
break;
case "chooseCustomFilenameRB":
print("Custom Filename Chosen\n");
textField -edit -enable 1 customFilenameTF;
button -edit -enable 1 browseFilenameButton;
break;
}
}
///////////////////////////////////////////////////////////
// Process: transformModeUI //
// Updates the UI when a radio button is chosen //
///////////////////////////////////////////////////////////
global proc transformModeUI()
{
string $selectedRB = `radioCollection -query -select transformModeRC`;
switch ($selectedRB)
{
case "chooseTransformModelRB":
print("Save transform of objects which have model- or DCS-flag only, CLEARS local pivot, orientation, scale, and shear of the other objects (all transform will be frozen to the vertices and will be 0 when loaded into Panda3D)\n");
break;
case "chooseTransformAllRB":
print("Save transform of all objects, PRESERVES local pivot, orientation, scale, and shear (all transform will remain when loaded into Panda3D)\n");
break;
}
}
///////////////////////////////////////////////////////////////
// Process: browseForFolder //
// Browses for a directory and returns the path as a string //
///////////////////////////////////////////////////////////////
global proc browseForFolder(string $destination)
{
fileBrowserDialog
-mode 4
-fileCommand ( "browseForFolderCallback \"" + $destination + "\"" )
-actionName "Pick a Folder";
}
global proc browseForFolderCallback(string $destination, string $result, string $type )
{
// Do whatever you need to with the $result
print ( "Folder selection: " + $result + "\n" );
if ( $destination == "texPath")
{
textField -edit -text $result customTexPathTF;
}
else
{
textField -edit -text $result customOutputPathTF;
}
}
///////////////////////////////////////////////////////////////
// Process: browseForFile //
// Browses for a file //
///////////////////////////////////////////////////////////////
global proc browseForFile(string $destination)
{
fileBrowserDialog
-mode 0
-fileType "*.EGG"
-fileCommand ( "browseForFileCallback \"" + $destination + "\"" )
-actionName "Pick a file";
}
global proc browseForFileCallback(string $destination, string $result, string $type )
{
$result=filePart($result);
$result=match( "[^.]*", $result );
print ( "File name: " + $result + "\n" );
textField -edit -text $result customFilenameTF;
}
///////////////////////////////////////////////////////////
// Process: filePart //
// Extracts the file portion of an absolute filepath. //
// Input: e.g. "D:/projects/default/scenes/myScene.mb" //
// Result: e.g. "myScene.mb" //
// Filepath can be delimited with //
// either slash ("/" or "\") //
///////////////////////////////////////////////////////////
global proc string filePart( string $path )
{
string $filePart = match( "[^/\\]*$", $path );
return $filePart;
}
////////////////////////////////////////////////////////////
// Process: pathPart //
// Extracts the path portion of an absolute filepath. //
// Input: e.g. "D:/projects/default/scenes/myScene.mb" //
// Result: e.g. "D:/projects/default/scenes" //
// Note: Requires that the filepath be delimited with //
// _forward_ slashes ("/") //
////////////////////////////////////////////////////////////
global proc string pathPart( string $path )
{
string $dir = match( "^.*/", $path );
// Strip off trailing '/'
// int $sz = size( $dir );
// if ( ( $sz > 1 ) && ( substring( $dir, $sz, $sz ) == "/" ) )
// {
// $dir = substring( $dir, 1, ($sz - 1) );
// }
return $dir;
}
///////////////////////////////////////////////////////////////
// Process: exportScene //
// exports the entire scene/selected objects //
///////////////////////////////////////////////////////////////
global proc string exportScene( string $selection )
{
print "Exporting scene...\n";
string $sceneFilePath = `file -q -sceneName`; //get scene filename and path
if ( $sceneFilePath == "" )
{
error "You have not yet saved this scene.\nPlease save your scene or specify a custom output directory and filename.\n";
return "failed";
}
string $scenePath = pathPart($sceneFilePath);
string $sceneFile = filePart($sceneFilePath);
string $fileName = `match "^[^\.]*" $sceneFile`; //cut off the file extension
string $tempScenePath = ($scenePath + $fileName + "_temp.mb");
if ( $selection == "all")
{
file -op "v=1" -typ "mayaBinary" -ea $tempScenePath; //export the whole scene
print ("Saved entire scene as temporary file: " + $fileName + "_temp.mb\n");
}
else
{
file -op "v=1" -typ "mayaBinary" -es $tempScenePath; //export only selected objects
print ("Saved selected objects as temporary file: " + $fileName + "_temp.mb\n");
}
return $tempScenePath;
}
///////////////////////////////////////////////////////////////
// Process: argsBuilder //
// constructs the arguments to pass to maya2egg //
///////////////////////////////////////////////////////////////
global proc string argsBuilder()
{
string $args = "maya2egg";
//get the version of maya and append it to the maya2egg call
string $mayaVersionLong = `getApplicationVersionAsFloat`;
string $mayaVersionShort = substituteAllString($mayaVersionLong, ".", "");
print ("MAYA VERSION : "+$mayaVersionShort+"\n");
//only strips the zeroes if the version number is less than 4
if (`size($mayaVersionShort)`<4)
{
$mayaVersionShort = substituteAllString($mayaVersionShort, "0", "");
}
$args += $mayaVersionShort;
$args += " ";
// We always want polygons, never nurbs.
$args += "-p ";
//check back face culling
if ( `checkBox -query -value bfaceCB` )
{
$args += "-bface ";
}
//check animation options
string $exportOptionsARGS = `radioCollection -query -select exportOptionsRC`;
switch ($exportOptionsARGS)
{
case "chooseMeshRB":
$args += "-a none ";
break;
case "chooseActorRB":
$args += "-a model ";
break;
case "chooseAnimationRB":
$args += "-a chan ";
//set the start frames **Does not check if start frame < end frame **Does not support negative values **Does not check if start/end frame is within bounds of the scene
if ( `radioCollection -query -select animationOptionsRC` == "chooseCustomRangeRB" )
{
string $startFrameARGS = `textField -query -text startFrameTF`;
string $endFrameARGS = `textField -query -text endFrameTF`;
//start frame
if ( `match "[0-9]+" $startFrameARGS` == $startFrameARGS && $startFrameARGS != "")
{
$args += ( "-sf " + `match "[0-9]+" $startFrameARGS` + " " );
}
else
{
error "Start Frame entered data is the wrong format. Should be an integer.\n";
return "failed";
}
//end frame
if ( `match "[0-9]+" $endFrameARGS` == $endFrameARGS && $endFrameARGS != "")
{
$args += ( "-ef " + `match "[0-9]+" $endFrameARGS` + " " );
}
else
{
error "End Frame entered data is the wrong format. Should be an integer.\n";
return "failed";
}
}
break;
case "chooseBothRB":
$args += "-a both ";
//set the start frames **Does not check if start frame < end frame **Does not support negative values **Does not check if start/end frame is within bounds of the scene
if ( `radioCollection -query -select animationOptionsRC` == "chooseCustomRangeRB" )
{
string $startFrameARGS = `textField -query -text startFrameTF`;
string $endFrameARGS = `textField -query -text endFrameTF`;
//start frame
if ( `match "[0-9]+" $startFrameARGS` == $startFrameARGS && $startFrameARGS != "")
{
$args += ( "-sf " + `match "[0-9]+" $startFrameARGS` + " " );
}
else
{
error "Start Frame entered data is the wrong format. Should be an integer.\n";
return "failed";
}
//end frame
if ( `match "[0-9]+" $endFrameARGS` == $endFrameARGS && $endFrameARGS != "")
{
$args += ( "-ef " + `match "[0-9]+" $endFrameARGS` + " " );
}
else
{
error "End Frame entered data is the wrong format. Should be an integer.\n";
return "failed";
}
}
break;
case "choosePoseRB":
$args += "-a pose ";
//set the start frames **Does not check if start frame < end frame **Does not support negative values **Does not check if start/end frame is within bounds of the scene
//start frame
string $startFrameARGS = `textField -query -text startFrameTF`;
if ( `match "[0-9]+" $startFrameARGS` == $startFrameARGS && $startFrameARGS != "")
{
$args += ( "-sf " + `match "[0-9]+" $startFrameARGS` + " " );
}
else
{
error "Start Frame entered data is the wrong format. Should be an integer.\n";
return "failed";
}
break;
}
//Relative path check
if ( `radioCollection -query -select texPathOptionsRC` == "chooseCustomTexPathRB" )
{
$args += ( "-pd " + "\"" + `textField -query -text customTexPathTF` + "\"" + " " );
}
print ( "Using these arguments: " + $args + "[END]\n" );
return $args;
}
///////////////////////////////////////////////////////////
// Process: export2Egg //
///////////////////////////////////////////////////////////
global proc string export2Egg ( string $mbfile, string $destPath, string $destFilename, string $transformMode, string $ARGS)
{
string $pandaEnvSetup = "set PATH=%MAYA_LOCATION%\\bin;%PATH% & ";
//Check if there is a valid maya binary file to operate on
if ( $mbfile == "" )
{
error "Not a valid Maya Binary file.";
return "failed";
}
//Start export process
else
{
//make the final egg path
string $eggFile = ( $destPath + $destFilename );
string $up=`upAxis -q -axis`;
string $unit=`optionMenu -q -value unitMenu`;
$ARGS += " -cs " + $up+"-up";
$ARGS += " -uo " + $unit;
$ARGS += " -trans " + $transformMode;
print ("Your scene will be saved as this egg file: " + $destFilename + "\n" );
print ("In this directory: " + $destPath + "\n" );
//Check if overwriting is enabled
if ( `checkBox -query -value overwriteCB` )
{
//Overwrite
print "!!Overwrite enabled!!\n";
string $result =
system
(
$pandaEnvSetup + $ARGS
+ " -o "
+ "\"" + $eggFile + "\""
+ " "
+ "\"" + $mbfile + "\""
);
print ($result + "\n");
}
else
{
//Don't overwrite
string $result =
system
(
$pandaEnvSetup + $ARGS
+ "\"" + $mbfile + "\""
+ " "
+ "\"" + $eggFile + "\""
);
print ($result + "\n");
}
string $unit=`optionMenu -q -value unitMenu`;
print ("Finished exporting (.mb -> .egg), unit : "+$unit+"\n");
return $eggFile;
}
}
///////////////////////////////////////////////////////////
// Process: exportButton //
///////////////////////////////////////////////////////////
global proc int exportButton ()
{
//We need to do before calling export2EGG/BAM/Pview:
//-Export a temporary MB
//-Get the destination path
//-Get the filename
//-Get the custom arguments
//Export the scene as a temporary file
string $tempMBFile = "";
if ( `checkBox -query -value selectedCB` )
{
$tempMBFile = exportScene( "selected" );
if ( $tempMBFile == "failed" )
{
return 0;
}
}
else
{
$tempMBFile = exportScene( "all" );
if ( $tempMBFile == "failed" )
{
return 0;
}
}
//get the original scene name
string $origFileName = filePart ( `file -q -sceneName` );
$origFileName = `match "^[^\.]*" $origFileName`; //cut off the file extension
//-Get the destination path
//-Get the filename
//-Get the custom arguments
string $eggFile = exportPrep ( $tempMBFile, $origFileName );
if ( $eggFile == "failed" )
{
return 0;
}
else
{
return 1;
}
}
///////////////////////////////////////////////////////////
// Process: send2Pview //
///////////////////////////////////////////////////////////
global proc send2Pview( string $file )
{
print "\nStarting pview...\n";
string $result =
system
(
"shell pview -l -c "
+ "\"" + $file + "\""
);
print ($result + "\n");
}
///////////////////////////////////////////////////////////
// Process: getFile2Pview //
///////////////////////////////////////////////////////////
global proc getFile2Pview()
{
string $selectedFile = `fileDialog -directoryMask "*.egg;*.bam"`;
string $origFileName = filePart ( $selectedFile );
$origFileName = `match "^[^\.]*" $origFileName`; //cut off the file extension
if ( $selectedFile == "")
{
error ( "No file selected\n" );
}
else
{
send2Pview ( $selectedFile );
}
}
///////////////////////////////////////////////////////////
// Process: getFile2Bam //
///////////////////////////////////////////////////////////
global proc getFile2Bam()
{
string $selectedFile = `fileDialog -directoryMask "*.egg"`;
if ( $selectedFile == "")
{
error ( "No file selected\n" );
}
else
{
export2Bam ( $selectedFile );
}
}
///////////////////////////////////////////////////////////
// Process: getFile2Egg //
///////////////////////////////////////////////////////////
global proc getFile2Egg()
{
string $selectedFile = `fileDialog -directoryMask "*.mb"`;
string $fileName = filePart ( $selectedFile );
$fileName = `match "^[^\.]*" $fileName`; //cut off the file extension
if ( $selectedFile == "")
{
error ( "No file selected\n" );
}
else
{
exportPrep ( $selectedFile, $fileName );
}
}
///////////////////////////////////////////////////////////
// Process: exportPrep //
///////////////////////////////////////////////////////////
global proc string exportPrep( string $workFile, string $fileName )
{
//Get the destination path
string $destPath = "";
if ( `radioCollection -query -select outputPathOptionsRC` == "chooseDefaultOutputPathRB" )
{
$destPath = pathPart($workFile);
}
else
{
if ( `textField -query -text customOutputPathTF` == "")
{
error "Output directory field is empty";
return "failed";
}
else
{
$destPath = `textField -query -text customOutputPathTF` + "/";
}
}
//Get the filename
string $destFilename = "";
if ( `radioCollection -query -select outputFilenameOptionsRC` == "chooseOriginalFilenameRB" )
{
$destFilename = $fileName + ".egg";
}
else
{
if ( `textField -query -text customFilenameTF` == "")
{
error "Custom filename field is empty";
return "failed";
}
else
{
$destFilename = `textField -query -text customFilenameTF` + ".egg";
}
}
//Get the transform mode
string $transformMode = "";
if ( `radioCollection -query -select transformModeRC` == "chooseTransformModelRB" )
{
$transformMode = "model";
}
else
{
$transformMode = "all";
}
//-Get the custom arguments
string $ARGS = argsBuilder();
if ( $ARGS == "failed" )
{
return "failed";
}
//export the egg
string $eggFile = export2Egg ( $workFile, $destPath, $destFilename, $transformMode, $ARGS);
if ( $eggFile == "failed" )
{
return "failed";
}
//run pview if option is selected
if ( `checkBox -query -value pviewCB` )
{
send2Pview ( $eggFile );
}
if ( `radioCollection -query -select outputFileOptionsRC` == "chooseEggBamRB" )
{
export2Bam ( $eggFile );
}
return $eggFile;
}
///////////////////////////////////////////////////////////
// Process: export2Bam //
///////////////////////////////////////////////////////////
global proc export2Bam ( string $eggFile )
{
//Check if there is a valid egg file to operate on
if ( $eggFile == "" )
{
//Cannot operate without an egg first
//throw error if the scene has no associated egg file
error "Invalid egg file";
}
//Call egg2bam
else
{
string $bamFile = "";
string $fileName = filePart($eggFile);
string $filePath = pathPart($eggFile);
//Use either the original fileName or a new fileName for the output
if ( `radioCollection -query -select outputFilenameOptionsRC` == "chooseCustomFilenameRB" )
{
$bamFile = $filePath + `textField -query -text customFilenameTF` + ".bam";
}
else
{
$bamFile = $filePath + `match "^[^\.]*" $fileName` + ".bam";
}
print ("Your file is: " + $fileName + "\nFound in path: " + $filePath + "\n\n");
print ("Your file will be saved as this bam file: " + $bamFile + "\n");
//Check if overwriting is enabled
if ( `checkBox -query -value overwriteCB` )
{
//Overwrite
string $result =
system
(
"egg2bam -o "
+ "\"" + $bamFile + "\""
+ " "
+ "\"" + $eggFile + "\""
);
print ($result + "\n");
}
else
{
//Don't overwrite
string $result =
system
(
"egg2bam "
+ "\"" + $eggFile + "\""
+ " "
+ "\"" + $bamFile + "\""
);
print ($result + "\n");
}
}
string $unit=`optionMenu -q -value unitMenu`;
print ("Finished exporting (.egg -> .bam), unit : "+$unit+"\n");
}