summaryrefslogtreecommitdiffstats
path: root/tools/MayaTools/Maya4.0/scripts/SimpsonsArt
diff options
context:
space:
mode:
Diffstat (limited to 'tools/MayaTools/Maya4.0/scripts/SimpsonsArt')
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/ajrAutoSave.mel532
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/copyToInst.mel302
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/forceTexture.mel44
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/forceUniqueNames.mel381
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/backfaceoff.bmpbin0 -> 5768 bytes
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/movetex.bmpbin0 -> 5768 bytes
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/optimizetex.bmpbin0 -> 5768 bytes
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/p3d.bmpbin0 -> 5768 bytes
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/prelighttool.bmpbin0 -> 5768 bytes
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/prelitoff.bmpbin0 -> 5768 bytes
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/removetxt.bmpbin0 -> 5768 bytes
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/renamesh.bmpbin0 -> 5768 bytes
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/renametex.bmpbin0 -> 5768 bytes
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/rnd.bmpbin0 -> 5768 bytes
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/setshape.bmpbin0 -> 5768 bytes
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/unique.bmpbin0 -> 5768 bytes
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/uvz.bmpbin0 -> 5768 bytes
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/mappedPrelight.mel126
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/mappedPrelightWindow.mel1118
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/nameSpaceGui.mel74
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/optimizeShaders.mel1046
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/renameScripts.mel313
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/renameTexture.mel94
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/replaceSimpleShaderWithLambert.mel152
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/replaceTex.mel38
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/rndPoints.mel578
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/rndPoints.xpm828
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/rp_help.mel184
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/searchReplaceWin.mel87
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/selectInst.mel36
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/setShapeNode.mel17
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/simpsonsArt.mel334
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/snapCurveY.mel75
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/uvz.mel226
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/yuya_copyFileTex.mel172
-rw-r--r--tools/MayaTools/Maya4.0/scripts/SimpsonsArt/yuya_copyFileTex.xpm198
36 files changed, 6955 insertions, 0 deletions
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/ajrAutoSave.mel b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/ajrAutoSave.mel
new file mode 100644
index 0000000..d3f7f0d
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/ajrAutoSave.mel
@@ -0,0 +1,532 @@
+/* This file downloaded from Highend3d.com
+''
+'' Highend3d.com File Information:
+''
+'' Script Name: ajrAutoSave v1.3
+'' Author: Andy Rawling
+'' Last Updated: July 17, 2001
+'' Update/Change this file at:
+'' http://www.highend3d.com/maya/mel/?section=utilities#198
+''
+'' Please do not alter any information above this line
+'' it is generated dynamically by Highend3d.com and will
+'' be changed automatically on any updates.
+*/
+
+// ajrAutoSave.mel
+// v 1.3 July 16 2001
+//
+// Tested on Maya2.5Irix Maya2.5.1NT Maya3.0Irix
+//
+// Provides automatic backup of scene files.
+//
+// When this script is first called, it creates two MEL scriptJobs to run
+// short procedures whenever the user selects or de-selects an object, and
+// when they change the current time. These jobs trigger backups in two
+// ways, either based on the number of times the user selects objects, or
+// on the amount of time since the last save.
+// The script also modifies your main File menu, adding File->Autosave options...
+// to the end. Choosing this menu command brings up the configuration GUI
+// (by running the same script again, but that's not important right now).
+//
+// In selection mode, the script keeps a count of how many times the selection
+// has changed, and will trigger an automatic scene backup when the number of
+// selection changes passes the limit set by the user.
+//
+// In time mode, the script checks the time whenever the selection or the
+// current time is changed by the user. The scene is backed up when the amount
+// of time since the last save passes the limit
+//
+// This script is designed to be called from your 'userSetup.mel' script.
+//
+// Configuration
+// -------------
+// If the script is run again, it will bring up a GUI which allows you to
+// modify the way that AutoSave works. The options are:
+// o Enable AutoSave
+// o Save After XX minutes/selects
+// o Keep up to XX backups
+// o Save in XX
+// o notify when saving
+//
+//
+// Enable AutoSave: Check this option off to disable AutoSave (default=ON)
+// Save After XX (things): Set the number of things which happen before the
+// autosave is triggered - either the user changing which items are
+// selected, or the number of minutes since the last save (default=15)
+// (minutes/selects): What sort of things are we using to spot changes? Either
+// number of times the selection changes, or number of minutes
+// passed since the last save (default=minutes , but see the caveats
+// below)
+// Keep up to XX backups: AutoSave keeps a rolling sequence of backups. The
+// number of separate backups can be changed here
+// (default=5)
+// Save in XXXX: Choose the folder where you want the backups to be kept.
+// This can be relative to your current project (default="scenes")
+// notify when saving: Bring up a small window to tell you when a backup is being
+// made (default=OFF)
+//
+//
+// Caveats
+// -------
+// Maya has no clock event, so when the save is time-based the clock is only
+// checked when the selection or the current time (as in time slider) changes.
+//
+// Changes (* is a highend3d release)
+// -------
+// v1.3* Autosaving no longer clears the current tool - cheers to Roger Klado
+// Feedback line is now more informative as the GUI settings are changed.
+// v1.2 I've got M3.0, so here there are annotations all over the GUI. Removed
+// the 'Include in File menu` option from the GUI - it's always included
+// now. Notify defaults to off now (too many hardware render mess-ups)
+// v1.1 Layout is more Irix/Motif-friendly now (was a bit squashed)
+// v1.0* Fixed minor bug when the scene wasn't saved, choosing not to save
+// would switch the autosave off. New behavior is to nag the user again
+// after the trigger period. Now uses a timer as well as selection counter
+// to trigger backups.
+//
+// Disclaimer
+// ----------
+// This script is unsupported; neither me nor (especially) my employer accept
+// liability for damage or loss resulting from its use or misuse. Use it at
+// your own risk. That said - if you like it, spot a bug in it or think it
+// could be improved please let me know.
+//
+// Andy Rawling andrew.rawling@_CUT_THIS_BIT_OUT_bigfoot.com
+// Animator
+//
+
+global proc ajrAS_SelectionHasChanged() {
+// This is called even when AutoSave is disabled, it just doesn't perform the save in this case
+// We're checking for time passing as well as selection changes here!
+
+ if((`optionVar -exists "ajrAS_iSelectTrigger"`) && (`optionVar -exists "ajrAS_iEnabled"`) && (`optionVar -exists "ajrAS_iUseTime"`)) {
+
+ if((`optionVar -query "ajrAS_iUseTime"`)) {
+ // We're using time to trigger saves
+ global float $ajrAS_fLastSave; //Absolute time of the last save (or script startup)
+ float $fElapsed;
+
+ $fElapsed = `timerX -startTime $ajrAS_fLastSave`;
+ if(($fElapsed / 60.0) > `optionVar -query "ajrAS_iSelectTrigger"`) {
+ if(`optionVar -query "ajrAS_iEnabled"`)
+ if (`ajrAS_SaveBackupScene`)
+ $ajrAS_fLastSave = `timerX`;
+ }
+ } else {
+ // Using the number of selection changes to trigger
+ global int $ajrAS_iSelectCount; // The selection change counter
+
+ $ajrAS_iSelectCount ++;
+ if ($ajrAS_iSelectCount >= `optionVar -query "ajrAS_iSelectTrigger"`) {
+ if(`optionVar -query "ajrAS_iEnabled"`)
+ if (`ajrAS_SaveBackupScene`)
+ $ajrAS_iSelectCount = 0;
+ }
+ }
+ }
+}
+
+global proc ajrAS_CurrentTimeHasChanged() {
+// This is called even when AutoSave is disabled, it just doesn't perform the save in this case
+// We're only interested in time passing here
+
+ if((`optionVar -exists "ajrAS_iSelectTrigger"`) && (`optionVar -exists "ajrAS_iEnabled"`)) {
+
+ if((`optionVar -query "ajrAS_iUseTime"`)) {
+ global float $ajrAS_fLastSave; //Absolute time of the last save (or script startup)
+ float $fElapsed;
+
+ $fElapsed = `timerX -startTime $ajrAS_fLastSave`;
+ if(($fElapsed / 60.0) > `optionVar -query "ajrAS_iSelectTrigger"`) {
+ if(`optionVar -query "ajrAS_iEnabled"`)
+ if (`ajrAS_SaveBackupScene`)
+ $ajrAS_fLastSave = `timerX`;
+ }
+ }
+ }
+}
+
+global proc int ajrAS_SaveBackupScene() {
+// Save the backup file
+// This routine is called when the number of events reaches the level set by the user
+// to trigger a backup save.
+// The save routine appends "_AutoSave#1" to the scene name of the first backup, then
+// #2, #3 etc, until the number of saves reaches the maximum limit, when the number
+// resets to 1 again.
+// If the notifier is switched on, a message window is created for the duration of the\
+// save. Either way, a message is shown on the command feedback line
+//
+ global int $ajrAS_iBackupNumber; // Number of the current backup file
+ string $sSceneName; // Full name (including directory path) of the scene file
+ string $sBackupName; // Name (not inc. path or extension) of the backup scene
+ string $sBackupDir;
+ string $sWorkingTool;
+ int $iReturn = 0;
+
+ // If these values are not in the prefs, then this function should never have been called. Check anyway.
+ if((`optionVar -exists "ajrAS_iSaveCopies"`) && (`optionVar -exists "ajrAS_iNotify"`) && (`optionVar -exists "ajrAS_sBackupDir"`)) {
+
+ $sSceneName = `file -query -sceneName`;
+ // If the scene has no name (hasn't been saved yet) then prompt to do a "Save As"
+ if($sSceneName == "") {
+ string $sReturn = `confirmDialog -title "AutoSave"
+ -message "This scene has not been saved.\nAutoSave will not back up an unsaved scene\n\nDo you want to save your scene now?"
+ -button "Yes"
+ -button "No"
+ -button "Configure"
+ -defaultButton "Yes"
+ -cancelButton "No"
+ -dismissString "No"`;
+ switch($sReturn) {
+
+ case "Configure":
+ ajrAS_GUI;
+ break;
+
+ case "Yes":
+ projectViewer("SaveAs");
+ break;
+
+ case "No":
+ // Reset the event counter
+ // The user will be nagged again shortly
+ $iReturn = 1;
+ break;
+ }
+ } else {
+ $sBackupDir = `optionVar -query "ajrAS_sBackupDir"`;
+ if (`file -query -exists $sBackupDir`) {
+ $sWorkingTool = `currentCtx`;
+ $sBackupName = (`optionVar -query "ajrAS_sBackupDir"` + "/" + `file -query -namespace` + "_AutoSave#" + $ajrAS_iBackupNumber);
+ if(`optionVar -query "ajrAS_iNotify"`)
+ ajrAS_MakeNotifyWindow($sBackupName);
+ print("Auto saving file: " + $sBackupName + ".\n");
+ file -rename $sBackupName;
+ file -save -type mayaBinary -defaultExtensions true;
+ $iReturn = 1;
+ file -rename $sSceneName;
+ $ajrAS_iBackupNumber ++;
+ if ($ajrAS_iBackupNumber > `optionVar -query "ajrAS_iSaveCopies"`)
+ $ajrAS_iBackupNumber = 1;
+ if(`optionVar -query "ajrAS_iNotify"`) {
+ deleteUI ui_ajrAS_NotifyWindow;
+ }
+ setToolTo $sWorkingTool;
+ } else {
+ ajrAS_CheckBackupDir;
+ }
+ }
+ }
+ return ($iReturn);
+}
+
+global proc ajrAS_MakeNotifyWindow(string $sFileName) {
+
+ if (`window -exists ui_ajrAS_NotifyWindow`)
+ deleteUI ui_ajrAS_NotifyWindow;
+
+ window -title ("Saving backup: " + $sFileName + ", please wait...")
+ -iconName "Saving"
+ -widthHeight 500 25
+ -menuBar false
+ ui_ajrAS_NotifyWindow;
+
+ showWindow ui_ajrAS_NotifyWindow;
+}
+
+global proc ajrAS_Reset() {
+// Reset GUI fields & prefs to defaults.
+ checkBox -edit -value on ui_ajrAS_iEnabled;
+ intField -edit -value 15 ui_ajrAS_iSelectTrigger;
+ optionMenu -edit -select 2 ui_ajrAS_type;
+ intField -edit -value 5 ui_ajrAS_iSaveCopies;
+ checkBox -edit -value on ui_ajrAS_iNotify;
+ textField -edit -fileName "scenes" ui_ajrAS_sBackupDir;
+ ajrAS_Update;
+ $ajrAS_iSelectCount = 0;
+}
+
+global proc ajrAS_Update() {
+// Update the prefs settings
+ optionVar -intValue "ajrAS_iEnabled" `checkBox -query -value ui_ajrAS_iEnabled`;
+ optionVar -intValue "ajrAS_iSelectTrigger" `intField -query -value ui_ajrAS_iSelectTrigger`;
+ optionVar -intValue "ajrAS_iUseTime" (`optionMenu -query -value ui_ajrAS_type` == "minutes");
+ optionVar -intValue "ajrAS_iSaveCopies" `intField -query -value ui_ajrAS_iSaveCopies`;
+ optionVar -intValue "ajrAS_iNotify" `checkBox -query -value ui_ajrAS_iNotify`;
+ optionVar -stringValue "ajrAS_sBackupDir" `textField -query -fileName ui_ajrAS_sBackupDir`;
+ string $sReportStr = "AutoSave: ";
+ if(! `optionVar -query "ajrAS_iEnabled"`)
+ $sReportStr += ("disabled.\n");
+ else {
+ ajrAS_SelectionHasChanged;
+ ajrAS_CheckBackupDir;
+ $sReportStr += ("every " + `optionVar -query "ajrAS_iSelectTrigger"` + " ");
+ if((`optionVar -query "ajrAS_iUseTime"`)) {
+ global float $ajrAS_fLastSave; //Absolute time of the last save (or script startup)
+ $sReportStr += ("minutes (next in ");
+ $sReportStr += ((int)(`optionVar -query "ajrAS_iSelectTrigger"` - (`timerX -startTime $ajrAS_fLastSave` / 60.0)) + "), ");
+ } else {
+ global int $ajrAS_iSelectCount; // The selection change counter
+ $sReportStr += ("selects (next in ");
+ $sReportStr += ((`optionVar -query "ajrAS_iSelectTrigger"` - ($ajrAS_iSelectCount)) + "), ");
+ }
+ $sReportStr += ("keep " + `optionVar -query "ajrAS_iSaveCopies"` + " copies in " + `optionVar -query "ajrAS_sBackupDir"` + ".\n");
+ }
+ print $sReportStr;
+}
+
+global proc int ajrAS_SetBackupDir(string $sDirName, string $sDirType) {
+// Callback function for 'fileBrowser' call on backup directory chooser
+ textField -edit -fileName `workspace -projectPath $sDirName` ui_ajrAS_sBackupDir;
+ ajrAS_Update;
+ return true;
+}
+
+global proc int ajrAS_CheckBackupDir() {
+// Check that the backup location is valid
+// If not, give the option of creating the backup directory, changing the location
+// or just carrying on (in which cast the save doesn't happen)
+ string $sBackupDir;
+ int $iReturn;
+
+ $sBackupDir = `optionVar -query "ajrAS_sBackupDir"`;
+ if (! `file -query -exists $sBackupDir`) {
+ string $sQuestion;
+ string $sAnswer;
+ $sQuestion = "Your backup folder, (" + $sBackupDir + ") doesn't exist.\n" +
+ "Would you like to create this folder, or use select a new location?\n" +
+ "\n" +
+ "(If you choose to do neither, saving will be disabled)";
+
+ $sAnswer = `confirmDialog -title "AutoSave"
+ -message $sQuestion
+ -button "Create"
+ -button "Re-Select"
+ -button "Forget it"
+ -defaultButton "Re-Select"
+ -cancelButton "Forget It"
+ -dismissString "Forget It"`;
+
+ switch($sAnswer) {
+ case "Create":
+ // Try to create the folder (no return value to check success)
+ workspace -create `workspace -expandName $sBackupDir`;
+ // Call this procedure again to see if it worked
+ ajrAS_CheckBackupDir;
+ break;
+ case "Re-Select":
+ optionVar -stringValue "ajrAS_sBackupDir" "scenes";
+ if (`window -exists ui_ajrAS`)
+ textField -edit -fileName "scenes" ui_ajrAS_sBackupDir;
+ else
+ ajrAS_GUI;
+ break;
+ default:
+ if (`window -exists ui_ajrAS`)
+ checkBox -edit -value off ui_ajrAS_iEnabled;
+ optionVar -intValue "ajrAS_iEnabled" off;
+ $iReturn = 0;
+ break;
+ }
+
+ } else
+ $iReturn = 1;
+
+ return $iReturn;
+}
+
+global proc ajrAS_FileMenu() {
+// Add or remove the AutoSave item from the main File menu
+ global string $gMainFileMenu; // Name of Maya 'File' menu
+
+ if(`menuItem -exists ui_ajrAS_FileAutoSaveSeperator`)
+ deleteUI ui_ajrAS_FileAutoSaveSeperator;
+ if(`menuItem -exists ui_ajrAS_FileAutoSaveMenu`)
+ deleteUI ui_ajrAS_FileAutoSaveMenu;
+
+ menuItem -parent $gMainFileMenu
+ -divider true
+ ui_ajrAS_FileAutoSaveSeperator;
+ menuItem -parent $gMainFileMenu
+ -label "Auto Save options..."
+ -annotation "Auto Save: Configure automatic backups"
+ -command "ajrAutoSave"
+ ui_ajrAS_FileAutoSaveMenu;
+}
+
+global proc ajrAS_GUI() {
+// Call up the GUI
+ if (`window -exists ui_ajrAS`)
+ deleteUI ui_ajrAS;
+
+ window -title "AutoSave v1.3"
+ -iconName "AutoSave"
+ -widthHeight 280 300
+ -menuBar false
+ ui_ajrAS;
+
+ formLayout ui_ajrAS_mainForm;
+
+ frameLayout -borderStyle "in"
+ -labelVisible false
+ ui_ajrAS_mainFrame;
+
+ scrollLayout -childResizable true
+ -verticalScrollBarThickness 10
+ -horizontalScrollBarThickness 0;
+
+ columnLayout -adjustableColumn true
+ -cal "left";
+
+ frameLayout -labelVisible false
+ -borderStyle "etchedIn"
+ -manage true;
+
+ columnLayout -adjustableColumn true
+ -columnOffset "left" 30
+ -columnAlign "left";
+
+ checkBox -label "Enable AutoSave"
+ -value `optionVar -query ajrAS_iEnabled`
+ -onCommand "ajrAS_Update"
+ -offCommand "ajrAS_Update; $ajrAS_iSelectCount = 0;"
+ -annotation "Enable: Switch the autosave feature on/off"
+ ui_ajrAS_iEnabled;
+
+ setParent ..;
+ setParent ..;
+
+ frameLayout -label "Options"
+ -borderStyle "etchedIn"
+ ui_ajrAS_optionsFrame;
+
+ columnLayout -adjustableColumn true
+ -columnOffset "left" 30
+ -columnAlign "left";
+
+ rowColumnLayout -numberOfColumns 3
+ -columnWidth 1 70
+ -columnWidth 2 40
+ -columnWidth 3 100;
+
+ text "Save after";
+ intField -value `optionVar -query ajrAS_iSelectTrigger`
+ -width 35
+ -changeCommand "ajrAS_Update"
+ -annotation "Save after: Good values are 200 for selects, 30 for minutes"
+ ui_ajrAS_iSelectTrigger;
+ optionMenu ui_ajrAS_type;
+ menuItem -label "selects";
+ menuItem -label "minutes";
+ optionMenu -edit
+ -changeCommand "ajrAS_Update"
+ -annotation "Save after: Will you make backups as the minutes pass, or as you pick objects"
+ -select (`optionVar -query ajrAS_iUseTime` + 1)
+ ui_ajrAS_type;
+
+ text "Keep up to";
+ intField -value `optionVar -query ajrAS_iSaveCopies`
+ -annotation "Keep up to: How many rolling copies do you want to keep"
+ -width 35
+ -changeCommand "ajrAS_Update"
+ ui_ajrAS_iSaveCopies;
+ text " backups";
+
+ setParent ..;
+
+ rowLayout -numberOfColumns 3
+ -columnWidth3 70 100 50
+ -columnAttach3 "left" "left" "left"
+ -columnOffset3 0 0 5
+ -adjustableColumn 2;
+
+ text -label "Save in";
+ textField -fileName `optionVar -query ajrAS_sBackupDir`
+ -width 90
+ -changeCommand "ajrAS_Update"
+ -annotation "Save in: Path to your backup folder (can be relative to your project)"
+ ui_ajrAS_sBackupDir;
+ symbolButton -image "navButtonBrowse.xpm"
+ -annotation "Save in: Browse for the backup folder"
+ -command "fileBrowser(\"ajrAS_SetBackupDir\",\"AutoSave\", \"folder\", 4);"
+ browser;
+ setParent ..;
+
+ checkBox -label "notify when saving"
+ -annotation "Notify: Pop up an window when saving (may interfere with hardware rendering)"
+ -value `optionVar -query ajrAS_iNotify`
+ -onCommand "ajrAS_Update"
+ -offCommand "ajrAS_Update"
+ ui_ajrAS_iNotify;
+
+ setParent ..;
+
+ setParent ..;
+
+ setParent ..;
+ setParent ..;
+ setParent ..;
+
+ button -label "Close"
+ -command "ajrAS_Update; deleteUI ui_ajrAS"
+ ui_ajrAS_close;
+
+ button -label "Reset"
+ -command "ajrAS_Reset"
+ ui_ajrAS_reset;
+
+ formLayout -edit
+ -attachForm ui_ajrAS_mainFrame "left" 5
+ -attachForm ui_ajrAS_mainFrame "right" 5
+ -attachForm ui_ajrAS_mainFrame "top" 5
+ -attachForm ui_ajrAS_mainFrame "bottom" 35
+
+ -attachPosition ui_ajrAS_reset "left" 2 50
+ -attachForm ui_ajrAS_reset "right" 5
+ -attachNone ui_ajrAS_reset "top"
+ -attachForm ui_ajrAS_reset "bottom" 5
+
+ -attachForm ui_ajrAS_close "left" 5
+ -attachPosition ui_ajrAS_close "right" 2 50
+ -attachNone ui_ajrAS_close "top"
+ -attachForm ui_ajrAS_close "bottom" 5
+
+ ui_ajrAS_mainForm;
+
+ showWindow ui_ajrAS;
+}
+
+global proc ajrAutoSave() {
+// Called when Maya starts up, and when the user wants to change settings.
+// If the selection script job can't be found, then assume it's startup time & just
+// silently go into the preferred state; otherwise bring up the GUI
+ global int $ajrAS_iTimeJobNo; // The number of the time change script job
+ global int $ajrAS_iSelJobNo; // The number of the select change script job
+ global int $ajrAS_iBackupNumber;
+ global float $ajrAS_fLastSave; // Time of the last save, or script launch
+
+ // If these values are not in the prefs, then set them to the defaults
+ if(! `optionVar -exists "ajrAS_iEnabled"`)
+ optionVar -intValue "ajrAS_iEnabled" off;
+ if(! `optionVar -exists "ajrAS_iSelectTrigger"`)
+ optionVar -intValue "ajrAS_iSelectTrigger" 15;
+ if(! `optionVar -exists "ajrAS_iUseTime"`)
+ optionVar -intValue "ajrAS_iUseTime" on;
+ if(! `optionVar -exists "ajrAS_iSaveCopies"`)
+ optionVar -intValue "ajrAS_iSaveCopies" 5;
+ if(! `optionVar -exists "ajrAS_iNotify"`)
+ optionVar -intValue "ajrAS_iNotify" off;
+ if(! `optionVar -exists "ajrAS_sBackupDir"`)
+ optionVar -stringValue "ajrAS_sBackupDir" "scenes";
+
+ if ($ajrAS_iSelJobNo != 0)
+ ajrAS_GUI;
+ else {
+ $ajrAS_iBackupNumber = 1;
+ $ajrAS_fLastSave = `timerX`;
+ ajrAS_FileMenu;
+ $ajrAS_iTimeJobNo = `scriptJob -event timeChanged ajrAS_CurrentTimeHasChanged`;
+ $ajrAS_iSelJobNo = `scriptJob -event SelectionChanged ajrAS_SelectionHasChanged`;
+ }
+}
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/copyToInst.mel b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/copyToInst.mel
new file mode 100644
index 0000000..36fd6f4
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/copyToInst.mel
@@ -0,0 +1,302 @@
+// copyToInst.mel
+// Copy to Instance
+// Alias|Wavefront Script File
+//
+// Creation Date: 24 Jan. 2001
+// Author: (Novy) Gurdarshan Dhillon
+//
+//
+//
+// Description:
+// Copy to Instance
+// Changes duplicated objects to instanced objects
+// The user picks the original object and the list of duplicated
+// objects.
+//
+// Additional Features:
+//
+// Additional Files needed:
+//
+// Input Arguments:
+// None.
+// Return Values:
+// None.
+// copyToInst
+//
+
+global proc copyToInst()
+{
+ global string $copyToInst_orig;
+ global string $copyToInst_new;
+ global string $copyToInst_dup;
+ global string $copyToInst_origButton;
+ global string $copyToInst_newButton;
+ global string $copyToInst_dupButton;
+ global string $copyToInst_check;
+ global string $copyToInst_InstDup;
+ global string $copyToInst_dupName;
+ if (`window -exists copyToInst`)
+ {
+ deleteUI -window copyToInst;
+ }
+ window -title "Copy to Instance" -rtf true -w 590 -h 400 -sizeable true copyToInst;
+ scrollLayout scrollLayout;
+ columnLayout -rs 5;
+ rowColumnLayout -nc 4 -columnWidth 1 80 -columnWidth 2 200 -columnWidth 3 80 -columnWidth 4 200;
+ columnLayout -cw 80 -cat "left" 5;
+ $copyToInst_origButton = `button -label "Add Original" -w 75 -en 1 -command "CTI_addOrig"`;
+ $copyToInst_newButton = `button -label "Add New" -w 75 -en 0 -command "CTI_addNew"`;
+ text -l "";
+ $copyToInst_dupName = `checkBox -label "Get Dup" -v 0`;
+ $copyToInst_check = `checkBox -label "Set Pivots" -v 1`;
+ $copyToInst_InstDup = `checkBox -label "Instance" -v 1`;
+ text -l "off : Duplicate";
+ text -l "on : Instance";
+ setParent ..;
+ columnLayout -cw 200 -cat "left" 0;
+ $copyToInst_orig = `textField -ed 0 -w 200 orig`;
+ $copyToInst_new = `textField -ed 0 -w 200 new`;
+ setParent ..;
+ rowLayout -w 80 -h 50 -nc 1 -cl1 "center";;
+ $copyToInst_dupButton = `button -label "Add Duplicates" -w 80 -en 0 -command "CTI_addDup"`;
+ setParent ..;
+ rowLayout -w 200 -h 300 -nc 1 -cl1 "center";;
+ $copyToInst_dup = `textScrollList -w 200 -h 300 dup`;
+ setParent ..;
+ setParent ..;
+ columnLayout -w 560 -h 100 -cat "left" 5;
+ button -label "Create" -w 550 -en 1 -command "CTI_create";
+ setParent ..;
+ setParent ..;
+ setParent ..;
+ window -edit -w 590 -h 400 copyToInst;
+ showWindow;
+}
+
+global proc CTI_addOrig()
+{
+ global string $copyToInst_orig;
+ global string $copyToInst_dup;
+ global string $copyToInst_origButton;
+ global string $copyToInst_newButton;
+ global string $copyToInst_dupButton;
+
+ string $object[];
+ int $numDup;
+ int $index;
+
+ clear($object);
+ $object = `ls -sl -tr`;
+ textField -edit -tx $object[0] $copyToInst_orig;
+ button -edit -en 1 $copyToInst_newButton;
+ $numDup = `textScrollList -q -ni $copyToInst_dup`;
+ textScrollList -edit -removeAll $copyToInst_dup;
+}
+
+global proc CTI_addNew()
+{
+ global string $copyToInst_new;
+ global string $copyToInst_dup;
+ global string $copyToInst_origButton;
+ global string $copyToInst_newButton;
+ global string $copyToInst_dupButton;
+
+ string $object[];
+ int $numDup;
+ int $index;
+
+ clear($object);
+
+ $object = `ls -sl -tr`;
+ textField -edit -tx $object[0] $copyToInst_new;
+ button -edit -en 1 $copyToInst_dupButton;
+}
+
+global proc CTI_addDup()
+{
+ global string $copyToInst_orig;
+ global string $copyToInst_new;
+ global string $copyToInst_dup;
+ global string $copyToInst_dupName;
+
+ string $object[];
+ string $original;
+ string $new;
+ int $index;
+ textScrollList -edit -removeAll $copyToInst_dup;
+ clear($object);
+ if (`checkBox -q -v $copyToInst_dupName`)
+ { selectInstance `textField -q -tx $copyToInst_orig`;}
+ $object = `ls -sl -tr`;
+ $original = `textField -query -tx $copyToInst_orig`;
+ $new = `textField -query -tx $copyToInst_new`;
+ for ($index=0; $index < size($object); $index++)
+ {
+ if($object[$index]!=$original && $object[$index]!=$new)
+ {
+ textScrollList -edit -append $object[$index] $copyToInst_dup;
+ }
+ }
+ select -clear;
+}
+
+global proc CTI_create()
+{
+ global string $copyToInst_orig;
+ global string $copyToInst_new;
+ global string $copyToInst_dup;
+ global string $copyToInst_check;
+ global string $copyToInst_InstDup;
+ string $objects[];
+ string $inst[];
+ string $inst_new[];
+ string $new;
+ string $original;
+ string $attr;
+ string $attr2;
+ float $orig_pivot[];
+ float $new_pivot[];
+ float $orig_trans[];
+ float $new_trans[];
+ float $trans[];
+
+ float $orig_scale_pivot[];
+ float $new_scale_pivot[];
+ float $orig_scale[];
+ float $new_scale[];
+ float $scale[];
+
+ float $orig_rot[];
+ float $orig_rotx;
+ float $orig_roty;
+ float $orig_rotz;
+ float $rot[];
+ float $x;
+ float $y;
+ float $z;
+ int $index;
+ int $numObj;
+
+ clear($objects); clear($trans); clear($rot); clear($inst); clear($inst_new);
+ clear($orig_pivot); clear($new_pivot); clear($orig_trans); clear($new_trans);
+
+ $original = `textField -query -tx $copyToInst_orig`;
+ $new = `textField -query -tx $copyToInst_new`;
+ $objects = `textScrollList -q -allItems $copyToInst_dup`;
+ $numObj = size($objects);
+ if(`checkBox -q -v $copyToInst_check` == 1)
+ {
+ $orig_pivot = `xform -q -rp $original`;
+ $new_pivot = `xform -q -rp $new`;
+ $orig_trans = `xform -q -t $original`;
+ $new_trans = `xform -q -t $new`;
+
+ $orig_scale_pivot = `xform -q -sp $original`;
+ $new_scale_pivot = `xform -q -sp $new`;
+ $orig_scale = `xform -q -s $original`;
+ $new_scale = `xform -q -s $new`;
+
+ $orig_rot = `xform -q -ro $original`;
+ $orig_rotx = $orig_rot[0];
+ $orig_roty = $orig_rot[1];
+ $orig_rotz = $orig_rot[2];
+// print $orig_trans;
+// print "---------\n";
+// print $new_trans;
+// print "---------\n";
+ }
+ else
+ {
+ $orig_pivot[0] = 0; $orig_pivot[1] = 0; $orig_pivot[2] = 0;
+ $new_pivot[0] = 0; $new_pivot[1] = 0; $new_pivot[2] = 0;
+ $orig_trans[0] = 0; $orig_trans[1] = 0; $orig_trans[2] = 0;
+ $new_trans[0] = 0; $new_trans[1] = 0; $new_trans[2] = 0;
+ $orig_scale_pivot[0] = 0; $orig_scale_pivot[1] = 0; $orig_scale_pivot[2] = 0;
+ $new_scale_pivot[0] = 0; $new_scale_pivot[1] = 0; $new_scale_pivot[2] = 0;
+ $orig_scale[0] = 0; $orig_scale[1] = 0; $orig_scale[2] = 0;
+ $new_scale[0] = 0; $new_scale[1] = 0; $new_scale[2] = 0;
+ $orig_rotx = 0;
+ $orig_roty = 0;
+ $orig_rotz = 0;
+ }
+ for($index=0; $index<$numObj; $index++)
+ {
+ clear($inst);
+ $attr = $objects[$index] + ".translate";
+ $trans = `xform -ws -q -rp $objects[$index]`;
+ $attr = $objects[$index] + ".rotate";
+ $rot = `getAttr $attr`;
+ $attr = $objects[$index] + ".scale";
+ $scale = `getAttr $attr`;
+ if(`checkBox -q -v $copyToInst_InstDup`)
+ { $inst = `instance $new`;}
+ else
+ { $inst = `duplicate $new`;}
+
+ $x = $trans[0] - $new_pivot[0];
+ $y = $trans[1] - $new_pivot[1];
+ $z = $trans[2] - $new_pivot[2];
+ xform -ws -t $x $y $z $inst[0];
+
+ $x = $rot[0] - $orig_rotx ;
+ $y = $rot[1] - $orig_roty;
+ $z = $rot[2] - $orig_rotz;
+ xform -a -ro $x $y $z $inst[0];
+
+ $x = $scale[0];
+ $y = $scale[1];
+ $z = $scale[2];
+ xform -ws -s $x $y $z $inst[0];
+ // $inst[0] = `rename $inst[0] $objects[$index]`;
+ $inst_new[$index] = $inst[0];
+ }
+ if(`checkBox -q -v $copyToInst_InstDup`==0)
+ {
+ for($obj in $inst_new)
+ {
+ string $newName = $obj + "Shape";
+ string $shape[] = `pickWalk -d "down" $obj`;
+ rename $shape[0] $newName;
+ }
+ }
+ if (size($new)>0)
+ {
+ group -n "inst" $inst_new;
+ }
+}
+
+global proc selectInstance(string $origObject)
+{
+ string $orig[];
+ clear($orig);
+ $orig[0] = $origObject;
+ select -r $origObject;
+ string $origShape[];
+ clear($origShape);
+ $origShape = `ls -sl -dag -lf`;
+ string $token[];
+ clear($token);
+ int $numTok;
+ $numTok = `tokenize $origShape[0] "|" $token`;
+// string $select[];
+// clear($select);
+ int $index;
+// int $count;
+// $count = 0;
+// if(`strcmp $orig[0] $token[0]`!=0)
+// { error "No Original Geometry Selected!!";}
+// else
+ {
+ string $objects[]= `ls -tr`;
+ for($object in $objects)
+ {
+ string $objShape[] = `ls -dag -lf $object`;
+ if(`strcmp $origShape[0] $objShape[0]` == 0)
+ {
+ select -add $object;
+ // $select[$count] = $object;
+ // $count++;
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/forceTexture.mel b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/forceTexture.mel
new file mode 100644
index 0000000..74541f9
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/forceTexture.mel
@@ -0,0 +1,44 @@
+global proc forceTexture ()
+{
+ for ($shader in `ls -mat`)
+ {
+ if($shader == "lambert1")
+ {
+ continue;
+ }
+ if($shader == "particleCloud1")
+ {
+ continue;
+ }
+
+ string $connections[] = `listConnections ($shader + ".color")`;
+ if(size($connections) > 0)
+ {
+ print ("Ignoring " + $shader + " since it already has a map...\n");
+ continue;
+ }
+ print ("Processing " + $shader + "\n");
+ float $colour[] = `getAttr ($shader + ".color")`;
+ int $colourR = $colour[0] * 255;
+ int $colourG = $colour[1] * 255;
+ int $colourB = $colour[2] * 255;
+ string $mapname = "R" + $colourR + "G" + $colourG + "B" + $colourB;
+ print ("Mapname " + $mapname+ "\n" );
+
+ shadingNode -asTexture ramp -name $mapname;
+ setAttr ($mapname +".colorEntryList[0].color") -type double3 $colour[0] $colour[1] $colour[2];
+ setAttr ($mapname +".colorEntryList[1].color") -type double3 $colour[0] $colour[1] $colour[2];
+ setAttr ($mapname +".colorEntryList[2].color") -type double3 $colour[0] $colour[1] $colour[2];
+ connectAttr ($mapname + ".outColor") ($shader + ".color");
+ if(`nodeType $shader` == "p3dSimpleShader")
+ {
+ setAttr ($shader +".proceduralXRes") 1;
+ setAttr ($shader +".proceduralYRes") 1;
+ }else
+ if(`nodeType $shader` == "lambert")
+ {
+ setAttr ($shader +".p3dProceduralTexXRes") 4;
+ setAttr ($shader +".p3dProceduralTexYRes") 4;
+ }
+ }
+}
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/forceUniqueNames.mel b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/forceUniqueNames.mel
new file mode 100644
index 0000000..c939c2d
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/forceUniqueNames.mel
@@ -0,0 +1,381 @@
+//===========================================================================
+// Copyright ©2002 Radical Entertainment Ltd. All rights reserved.
+//
+// Created: 26 March, 2002
+//
+// Description: Forces unique names for all nodes in the scene, and ensures
+// that each Shape node derives its name (and numerical suffix)
+// from its Transform.
+//
+// Constraints:
+//
+// Creator: Bryan Ewert
+//
+//===========================================================================
+
+//===========================================================================
+// version
+//===========================================================================
+// Description: Returns the current version for this MEL script.
+// Used for version control.
+//
+// Constraints:
+//
+//===========================================================================
+proc float version()
+{
+ return ( 1.1 ); // 01 May 2002
+}
+
+//===========================================================================
+// depth
+//===========================================================================
+// Description: Determines the depth of the specified DAG; e.g. the depth
+// for "|group1|transform2|transformShape2" is 3.
+//
+// Constraints:
+//
+// Parameters: string $node: The full path to the node.
+//
+// Return: (int): The depth of the path.
+//
+//===========================================================================
+proc int depth( string $node )
+{
+ int $depth = 0;
+
+ if ( `objExists $node` )
+ {
+ string $longA[] = `ls -l $node`;
+
+ string $tokens[];
+ $depth = `tokenize $longA[0] "|" $tokens`;
+ }
+
+ return $depth;
+}
+
+//===========================================================================
+// nameNoPath
+//===========================================================================
+// Description: Returns the short name for the specified node.
+// "|group1|transform2|transformShape2" would return
+// "transformShape2"
+//
+// Constraints: The pathless name may not be unique, and may not be
+// sufficient for Maya to resolve the DAG! This name is
+// intended for use in a rename operation, and not for
+// performing edit operations on the object.
+//
+// Parameters: string $node: The full path to the node.
+//
+// Return: (string): The short path for the node.
+//
+//===========================================================================
+proc string nameNoPath( string $node )
+{
+ return `match "[^|]*$" $node`;
+}
+
+//===========================================================================
+// isUnique
+//===========================================================================
+// Description: Determines if the specified node has a unique name.
+//
+// Constraints:
+//
+// Parameters: string $node: Name of the node (may be full path, may not).
+//
+// Return: (int): TRUE (non-zero) if name is unique; else FALSE (zero).
+//
+//===========================================================================
+proc int isUnique( string $node )
+{
+ int $isUnique = true;
+
+ string $noPath = nameNoPath( $node );
+ string $wildcard = ( "*" + $noPath );
+ string $potentials[] = `ls $wildcard`;
+
+ int $numMatches = 0;
+ for ( $p in $potentials )
+ {
+ string $tokens[];
+ int $numTokens = `tokenize $p "|" $tokens`;
+ if ( $tokens[$numTokens-1] == $noPath )
+ {
+ $numMatches++;
+ }
+ }
+
+ $isUnique = ( $numMatches < 2 );
+
+ return $isUnique;
+}
+
+//===========================================================================
+// getUniqueName
+//===========================================================================
+// Description: Builds a unique name for the specified node by generating
+// a numerical suffix for the node. An existing numerical
+// suffix is stripped and replaced if the node's name is not
+// already unique.
+//
+// Constraints: The returned name does _not_ contain a path and may not be
+// sufficient for Maya to resolve the DAG! This name is
+// intended for use in a rename operation, and not for
+// performing edit operations on the object.
+//
+// Parameters: string $node: The full path to the node.
+//
+// Return: (string): A unique name for the node.
+//
+//===========================================================================
+proc string getUniqueName( string $node )
+{
+ string $shortNode = nameNoPath( $node );
+ string $unique = $shortNode;
+
+ if ( !isUnique( $shortNode ) )
+ {
+ // strip numeric suffix
+ string $suffix = `match "[0-9]*$" $shortNode`;
+ int $sizeShortNode = `size $shortNode`;
+ int $sizeSuffix = `size $suffix`;
+ $shortNode = `substring $shortNode 1 ( $sizeShortNode - $sizeSuffix )`;
+
+ if ( !`objExists $shortNode` )
+ {
+ $unique = $shortNode;
+ }
+ else
+ {
+ string $newNode;
+ int $u = 1;
+ do
+ {
+ $newNode = ( $shortNode + ($u++) );
+ } while ( `objExists $newNode` );
+
+ $unique = $newNode;
+ }
+ }
+
+ return $unique;
+}
+
+//===========================================================================
+// getShape
+//===========================================================================
+// Description: Returns the shape node, if any, for the specified transform.
+//
+// Constraints: Considers only a single shape.
+//
+// Parameters: string $xform: The transform node.
+//
+// Return: (string): The shape node.
+//
+//===========================================================================
+proc string getShape( string $xform )
+{
+ string $shapes[];
+
+ $shapes[0] = $xform;
+
+ string $isTransform[] = `ls -transforms $xform`;
+
+ if ( `size $isTransform` > 0 )
+ // If given node is not a transform, assume it is a shape
+ // and pass it through
+ {
+ $shapes = `listRelatives -fullPath -shapes $xform`;
+ }
+
+ return $shapes[0];
+}
+
+//===========================================================================
+// getShapeName
+//===========================================================================
+// Description: Derives a name for the shape node given the specified
+// transform name. For example if the $node specified is
+// "pCube23" the shape name will be "pCubeShape23".
+//
+// Constraints: No checking is done to verify that $node is a transform.
+//
+// Parameters: string $node: The name for the transform node.
+//
+// Return: (string): The name for the shape node.
+//
+//===========================================================================
+proc string getShapeName( string $node )
+{
+ string $numeric = `match "[0-9]+$" $node`;
+
+ int $strlen = `size $node`;
+ int $numlen = `size $numeric`;
+ string $alpha = `substring $node 1 ( $strlen - $numlen )`;
+
+ string $shapeName = ( $alpha + "Shape" + $numeric );
+
+ return $shapeName;
+}
+
+//===========================================================================
+// performRename
+//===========================================================================
+// Description: Does the work for the rename operation -- generates unique
+// names for the transform and shape nodes, assesses whether
+// the names are non-unique and, if necessary, renames the
+// nodes.
+//
+// Constraints: Read-only nodes (such as Maya's startup cameras) are a real
+// pain in the keister because there is no way to detect them
+// reliably ('ls -readOnly' doesn't work for this). Currently
+// the workaround is to assess whether my "unique" name is
+// the same as Maya's current name and, if so, don't bother
+// attempting a rename operation.
+//
+// Parameters: string $node: The full path to the node being renamed.
+//
+// Return: (int): TRUE (non-zero) if successful; else FALSE.
+// TRUE doesn't necessary mean it was renamed; it may
+// also mean it did not need to be renamed.
+//
+//===========================================================================
+proc int performRename( string $node )
+{
+ int $bSuccess = false;
+
+ if ( `objExists $node` )
+ {
+ string $unique = getUniqueName( $node );
+ string $shape = getShape( $node );
+
+ if ( $shape != "" )
+ {
+ string $uniqueShape = getShapeName( $unique );
+ if ( $uniqueShape != nameNoPath( $shape ) )
+ {
+ eval( "rename " + $shape + " " + $uniqueShape );
+ }
+ }
+
+ if ( $unique != nameNoPath( $node ) )
+ {
+ eval( "rename " + $node + " " + $unique );
+ }
+
+ $bSuccess = true;
+ }
+
+ return $bSuccess;
+}
+
+//===========================================================================
+// performUniqueNames
+//===========================================================================
+// Description: Recursive procedure for assessing the scene and looping
+// through the transform nodes. The renaming is performed
+// from the top-down, and if a top-level node is renamed the
+// path to its children will no longer be valid. The cheap
+// way around this is to detect an invalid path and signal
+// a recursive call to this function. The number of retries
+// is capped to prevent any possibility of infinite recursion.
+//
+// Constraints:
+//
+// Parameters: int $progress: The current progress; i.e. the number of
+// nodes successfully processed so far.
+// int $retry: Number of retries (recursions) remaining.
+//
+// Return: (none)
+//
+//===========================================================================
+proc performUniqueNames( int $progress, int $retry )
+{
+ $retry = max( $retry, 0 );
+
+ int $bSuccess = true;
+
+ string $transforms[] = `ls -long -transforms`;
+ int $depth[];
+ int $maxDepth = 0;
+
+ for ( $t = 0; $t < `size $transforms`; $t++ )
+ {
+ $depth[$t] = depth( $transforms[$t] );
+ $maxDepth = max( $maxDepth, $depth[$t] );
+ }
+
+ for ( $d = 1; $d <= $maxDepth; $d++ )
+ {
+ for ( $t = 0; $t < `size $transforms`; $t++ )
+ {
+ if ( $depth[$t] == $d )
+ {
+ $bSuccess = performRename( $transforms[$t] ) && $bSuccess;
+
+ if ( $bSuccess ) $progress++;
+ }
+
+ progressWindow -e -progress $progress;
+ }
+ }
+
+ if ( !$bSuccess && $retry ) performUniqueNames( $progress, --$retry );
+}
+
+//===========================================================================
+// forceUniqueNames
+//===========================================================================
+// Description: Entry point for this script.
+//
+// Forces unique names for all nodes in the scene, and ensures
+// that each Shape node derives its name (and numerical suffix)
+// from its Transform.
+//
+// Constraints:
+//
+// Parameters: (none)
+//
+// Return: (none)
+//
+//===========================================================================
+global proc forceUniqueNames()
+{
+ int $numRetries = 8;
+
+ waitCursor -state on;
+
+ string $transforms[] = `ls -l -type "transform"`;
+
+ int $allProgress = ( `size $transforms` );
+ int $progress = 0;
+ int $progressThreshold = 256; // no progress window for fewer items.
+
+ if ( $allProgress > $progressThreshold )
+ {
+ progressWindow
+ -ii false // not interruptable, sorry.
+ -min 0
+ -max $allProgress
+ -title "Force Unique Names"
+ -status "Scanning for non-unique names."
+ ;
+ }
+
+ performUniqueNames( $progress, $numRetries );
+
+ if ( $allProgress > $progressThreshold )
+ {
+ progressWindow -endProgress;
+ }
+
+ waitCursor -state off;
+}
+
+
+/*
+source forceUniqueNames; forceUniqueNames;
+*/
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/backfaceoff.bmp b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/backfaceoff.bmp
new file mode 100644
index 0000000..cdcf12f
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/backfaceoff.bmp
Binary files differ
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/movetex.bmp b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/movetex.bmp
new file mode 100644
index 0000000..30ae56d
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/movetex.bmp
Binary files differ
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/optimizetex.bmp b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/optimizetex.bmp
new file mode 100644
index 0000000..af78381
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/optimizetex.bmp
Binary files differ
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/p3d.bmp b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/p3d.bmp
new file mode 100644
index 0000000..8e4871e
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/p3d.bmp
Binary files differ
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/prelighttool.bmp b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/prelighttool.bmp
new file mode 100644
index 0000000..4025c62
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/prelighttool.bmp
Binary files differ
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/prelitoff.bmp b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/prelitoff.bmp
new file mode 100644
index 0000000..8b08d44
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/prelitoff.bmp
Binary files differ
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/removetxt.bmp b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/removetxt.bmp
new file mode 100644
index 0000000..0cc5661
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/removetxt.bmp
Binary files differ
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/renamesh.bmp b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/renamesh.bmp
new file mode 100644
index 0000000..f0160a3
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/renamesh.bmp
Binary files differ
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/renametex.bmp b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/renametex.bmp
new file mode 100644
index 0000000..b00e2b5
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/renametex.bmp
Binary files differ
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/rnd.bmp b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/rnd.bmp
new file mode 100644
index 0000000..6ce51cc
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/rnd.bmp
Binary files differ
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/setshape.bmp b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/setshape.bmp
new file mode 100644
index 0000000..7571fdb
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/setshape.bmp
Binary files differ
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/unique.bmp b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/unique.bmp
new file mode 100644
index 0000000..d04b12b
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/unique.bmp
Binary files differ
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/uvz.bmp b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/uvz.bmp
new file mode 100644
index 0000000..a992bce
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/icons/uvz.bmp
Binary files differ
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/mappedPrelight.mel b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/mappedPrelight.mel
new file mode 100644
index 0000000..6da9772
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/mappedPrelight.mel
@@ -0,0 +1,126 @@
+/*===========================================================================
+ File: mappedPrelight.mel
+ Created: January 28, 2002
+ Author: Harold Westlund
+
+ Copyright (c) 2002 Radical Entertainment, Inc.
+ All rights reserved.
+
+=============================================================================
+
+ This procedure remaps vertex colour of a mesh. Colours within a
+ specified luminance range (low to high) are mapped to the corresponding
+ RGB color. Low-high-RGB sets are passed to this procedure as parater
+ arrays.
+
+ return value:
+ bool = success of this procedure.
+
+===========================================================================*/
+
+global proc int mappedPrelight (
+ float $map_low[],
+ float $map_high[],
+ float $map_red[],
+ float $map_green[],
+ float $map_blue[] )
+{
+ print "Remapping vertex colours.\n";
+
+ int $NUM_MAPS = size( $map_low );
+ if( size( $map_high ) != $NUM_MAPS ||
+ size( $map_red ) != $NUM_MAPS ||
+ size( $map_green ) != $NUM_MAPS ||
+ size( $map_blue ) != $NUM_MAPS )
+ {
+ return false;
+ }
+
+ string $selection[] = `ls -selection`;
+
+ string $mesh[] = `filterExpand -sm 12 -ex true`;
+
+ // Step through all selected meshes
+ for( $i = 0; $i < size($mesh); $i++ )
+ {
+ int $verticesA[] = `polyEvaluate -v ( $mesh[$i] )`;
+ int $numVerts = $verticesA[0];
+ clear $verticesA;
+
+ int $vfIdx = 0;
+ int $viList[];
+ int $fiList[];
+ float $redList[];
+ float $greenList[];
+ float $blueList[];
+
+ // Step through the vertices in the mesh
+ for( $j = 0; $j < $numVerts; $j++ )
+ {
+ // Find the faces which use the current vertex.
+ string $command = " " + $mesh[$i] + ".vtx["+$j+"]";
+ string $s[] = `polyInfo -vf $command`;
+ string $t[];
+ int $tokCount = `tokenize $s[0] $t`;
+ clear $s;
+
+ // Step through the vertexFaces for this vertex
+ for( $k = 2; $k < $tokCount; $k++ )
+ {
+ string $vf = " " + $mesh[$i] + ".vtxFace["+$j+"]["+$t[$k]+"]";
+ float $rgb[] = `polyColorPerVertex -q -r -g -b $vf`;
+ float $red = $rgb[0];
+ float $green = $rgb[1];
+ float $blue = $rgb[2];
+ clear $rgb;
+
+ // Find the lumninance
+ float $y = .299 * $red + .587 * $green + .114 * $blue;
+
+ // Apply the appropriate color maps.
+ int $mIdx;
+ for ( $mIdx = 0; $mIdx < $NUM_MAPS; $mIdx++ )
+ {
+ if ( ($y <= ( $map_high[$mIdx] ) ) &&
+ ($y >= ( $map_low[$mIdx] ) ) )
+ {
+ // Luminance is within specified range
+ $red = $map_red[$mIdx];
+ $green = $map_green[$mIdx];
+ $blue = $map_blue[$mIdx];
+
+ // Write color back to vertexFace
+// polyColorPerVertex -e -rgb $red $green $blue $vf;
+ break;
+ }
+ }
+ $viList[$vfIdx] = $j;
+ $fiList[$vfIdx] = $t[$k];
+ $redList[$vfIdx] = $red;
+ $greenList[$vfIdx] = $green;
+ $blueList[$vfIdx] = $blue;
+
+ $vfIdx++;
+
+ }
+ clear $t;
+
+ }
+ // Use the collected information to colour the mesh.
+ polyColorPerVertexArray( $viList, $fiList, $redList,
+ $greenList, $blueList, $mesh[$i] );
+ clear $viList;
+ clear $fiList;
+ clear $redList;
+ clear $greenList;
+ clear $blueList;
+ }
+ clear $mesh;
+
+ select $selection;
+
+ print "Finished remapping.\n";
+
+ return true;
+}
+
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/mappedPrelightWindow.mel b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/mappedPrelightWindow.mel
new file mode 100644
index 0000000..c3b39cb
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/mappedPrelightWindow.mel
@@ -0,0 +1,1118 @@
+/*===========================================================================
+ File: mappedPrelightWindow.mel
+ Created: January 28, 2002
+ Author: Harold Westlund
+
+ Copyright (c) 2002 Radical Entertainment, Inc.
+ All rights reserved.
+
+ Updated: April 12, 2002
+ Version: 1.2.0
+
+=============================================================================
+
+ mappedPrelightWindow is the user interface for mappedPrelight.
+
+ This program provides a means to map from a specified cbv brightness
+ range to another colour. Up to six maps may be specifed and used in
+ any combination.
+
+===========================================================================*/
+
+// Gather global data from other functions and apply to the window.
+global proc P3Dmp_updateAllMappedPrelightGlobal( int $mpNumMaps )
+{
+ // Prepare for forced min value if checked.
+ P3Dmp_forceValues ( $mpNumMaps );
+}
+
+
+// Add Context Sensitive Help
+global proc P3Dmp_buildMappedPrelightContextHelpItems(string $nameRoot, string $menuParent)
+{
+ menuItem -label "Help on Mapped Prelight..."
+ -enableCommandRepeat false
+ -command "showHelp -d \"UserGuide/ModelingPoly/PolyColoring3.html\"";
+}
+
+// Prelight the selected object using default options.
+global proc P3Dmp_performPrelight ()
+{
+ toggleMaterialMapping(0);
+ polyGeoSampler
+ -sf 0
+ -su
+ -colorBlend overwrite
+ -alphaBlend overwrite;
+ toggleMaterialMapping(1);
+}
+
+// Prelight conditional upon prelight checkbox being checked
+// Either way, set the persistent data.
+global proc P3Dmp_conditionalPerformPrelight ()
+{
+ int $usePrelight;
+ $usePrelight = `checkBox -q -v performPrelightCheckBox`;
+ optionVar -intValue P3D_mpPerformPrelight $usePrelight;
+
+ if ($usePrelight)
+ {
+ print "Performing prelight\n";
+
+ P3Dmp_performPrelight();
+ }
+}
+
+//==================================================================
+//
+// Modify the UI through interaction
+//
+//==================================================================
+
+// Force the minimum value of one map to be the maximum value
+// of the previous map.
+global proc P3Dmp_forceValues ( int $mapID )
+{
+ int $forceMinValue;
+ $forceMinValue = `checkBox -q -v forceMinValueCheckBox`;
+
+ int $lastMapUsed = 0;
+
+ // Check every map's UI settings
+ int $i;
+ for( $i = 1; $i <= $mapID; $i++ )
+ {
+ if( $forceMinValue == true )
+ {
+ int $mapUse;
+ $mapUse = `checkBox -q -v ( "mpMap" + $i + "CheckBox" )`;
+ if($mapUse)
+ {
+ // Nothing is done to the first map in use.
+ // Other maps have the min set to the max of the
+ // last in use map, and then the min is disabled.
+ if( $lastMapUsed != 0 )
+ {
+ float $mapMin = `floatField -q -v ("mpMap" + $lastMapUsed + "MaxField")`;
+ floatField -edit -v $mapMin ("mpMap" + $i + "MinField");
+ floatField -edit -enable 0 ("mpMap" + $i + "MinField");
+ }
+ else
+ {
+ floatField -edit -enable 1 ("mpMap" + $i + "MinField");
+ }
+
+ $lastMapUsed = $i;
+ }
+
+ }
+ else
+ {
+ int $mapUse;
+ $mapUse = `checkBox -q -v ( "mpMap" + $i + "CheckBox" )`;
+ if($mapUse)
+ {
+
+ floatField -edit -enable 1 ("mpMap" + $i + "MinField");
+ }
+
+ }
+ }
+}
+
+// Turn a particular map on or off.
+global proc P3Dmp_changeMapUse ( int $mapID )
+{
+ string $mapName = ( "mpMap" + $mapID );
+
+ string $checkBox = ( $mapName + "CheckBox" );
+
+ string $layout = ( $mapName + "DetailsLayout" );
+
+ int $isOn = `checkBox -q -v $checkBox`;
+
+ // Now enable or disable the map.
+ columnLayout -edit
+ -enable $isOn
+ $layout;
+
+ // Changing the map use will affect forced minimums.
+ P3Dmp_forceValues ( $mapID );
+}
+
+// Apply the numeric RGB values to the colour slider.
+global proc P3Dmp_changeMapRGB ( int $mapID, string $srcDst)
+{
+ string $mapName = ( "mpMap" + $mapID + $srcDst );
+
+ string $RedField = ( $mapName + "RedField" );
+ string $GreenField = ( $mapName + "GreenField" );
+ string $BlueField = ( $mapName + "BlueField" );
+
+ float $red, $green, $blue;
+ $red = `floatField -q -v $RedField`;
+ $green = `floatField -q -v $GreenField`;
+ $blue = `floatField -q -v $BlueField`;
+
+ colorSliderButtonGrp -edit
+ -rgbValue $red $green $blue
+ ( $mapName + "ColorSlider" );
+}
+
+// Apply the colour slider values to the numeric RGB values.
+global proc P3Dmp_changeMapRGBSlider ( int $mapID, string $srcDst )
+{
+ string $mapName = ( "mpMap" + $mapID + $srcDst );
+
+ float $rgb[3];
+
+ $rgb = `colorSliderButtonGrp -q -rgbValue ( $mapName + "ColorSlider" )`;
+
+ string $RedField = ( $mapName + "RedField" );
+ string $GreenField = ( $mapName + "GreenField" );
+ string $BlueField = ( $mapName + "BlueField" );
+
+ $red = `floatField -edit -v ( $rgb[0] ) $RedField`;
+ $green = `floatField -edit -v ( $rgb[1] ) $GreenField`;
+ $blue = `floatField -edit -v ( $rgb[2] ) $BlueField`;
+
+ clear $rgb;
+}
+
+// Apply the prelight maps in the range specified to the selected objects.
+global proc P3Dmp_applyPrelightMaps( int $minMapNum, int $maxMapNum )
+{
+ int $i;
+ int $numMapsInUse;
+ float $mapsMin[], $mapsMax[];
+ float $mapsRed[], $mapsGreen[], $mapsBlue[];
+ float $mapMin, $mapMax;
+ float $mapRed, $mapGreen, $mapBlue;
+
+ waitCursor -state on;
+
+ for( $i = $minMapNum; $i <= $maxMapNum; $i++ )
+ {
+ string $mapName = ( "mpMap" + $i );
+ int $mapUse;
+
+ string $checkBox = ( $mapName + "CheckBox" );
+ string $MinField = ( $mapName + "MinField" );
+ string $MaxField = ( $mapName + "MaxField" );
+ string $RedField = ( $mapName + "SrcRedField" );
+ string $GreenField = ( $mapName + "SrcGreenField" );
+ string $BlueField = ( $mapName + "SrcBlueField" );
+
+ $mapUse = `checkBox -q -v $checkBox`;
+ $mapMin = `floatField -q -v $MinField`;
+ $mapMax = `floatField -q -v $MaxField`;
+ $mapRed = `floatField -q -v $RedField`;
+ $mapGreen = `floatField -q -v $GreenField`;
+ $mapBlue = `floatField -q -v $BlueField`;
+
+ if ($mapUse)
+ {
+ $mapsMin[$numMapsInUse] = $mapMin;
+ $mapsMax[$numMapsInUse] = $mapMax;
+ $mapsRed[$numMapsInUse] = $mapRed;
+ $mapsGreen[$numMapsInUse] = $mapGreen;
+ $mapsBlue[$numMapsInUse] = $mapBlue;
+
+ $numMapsInUse++;
+ }
+
+ string $varName = ( "P3D_" + $mapName );
+ optionVar -intValue ( $varName + "Use" ) $mapUse;
+ optionVar -floatValue ( $varName + "Min" ) $mapMin;
+ optionVar -floatValue ( $varName + "Max" ) $mapMax;
+ optionVar -floatValue ( $varName + "SrcRed" ) $mapRed;
+ optionVar -floatValue ( $varName + "SrcGreen" ) $mapGreen;
+ optionVar -floatValue ( $varName + "SrcBlue" ) $mapBlue;
+
+ }
+
+ // Perform prelighting if selected
+ P3Dmp_conditionalPerformPrelight();
+
+ // Store current UI settings
+ int $forceMinValue, $useAveSides;
+ $forceMinValue = `checkBox -q -v forceMinValueCheckBox`;
+ $useAveSides = `checkBox -q -v useAverageSideCheckBox`;
+ optionVar -intValue P3D_mpforceMinValue $forceMinValue;
+ optionVar -intValue P3D_mpUseAveSides $useAveSides;
+
+ if( $useAveSides )
+ {
+ mappedAvePrelight $mapsMin $mapsMax $mapsRed $mapsGreen $mapsBlue;
+ }
+ else {
+ mappedPrelight $mapsMin $mapsMax $mapsRed $mapsGreen $mapsBlue;
+ }
+
+ clear $mapsMin;
+ clear $mapsMax;
+ clear $mapsRed;
+ clear $mapsGreen;
+ clear $mapsBlue;
+
+ waitCursor -state off;
+}
+
+// Apply the colour maps in the range specified to the selected objects.
+global proc P3Dmp_applyColourMaps( int $minMapNum, int $maxMapNum, int $forward )
+{
+ int $i;
+ int $numMapsInUse;
+ float $mapsTolerance[];
+ float $mapsSrcRed[], $mapsSrcGreen[], $mapsSrcBlue[];
+ float $mapsDstRed[], $mapsDstGreen[], $mapsDstBlue[];
+ float $mapTolerance;
+ float $mapSrcRed, $mapSrcGreen, $mapSrcBlue;
+ float $mapDstRed, $mapDstGreen, $mapDstBlue;
+
+ waitCursor -state on;
+
+ for( $i = $minMapNum; $i <= $maxMapNum; $i++ )
+ {
+ string $mapName = ( "mpMap" + $i );
+ int $mapUse;
+
+ string $checkBox = ( $mapName + "CheckBox" );
+ string $SrcRedField = ( $mapName + "SrcRedField" );
+ string $SrcGreenField = ( $mapName + "SrcGreenField" );
+ string $SrcBlueField = ( $mapName + "SrcBlueField" );
+ string $ToleranceField = ( $mapName + "ToleranceField" );
+ string $DstRedField = ( $mapName + "DstRedField" );
+ string $DstGreenField = ( $mapName + "DstGreenField" );
+ string $DstBlueField = ( $mapName + "DstBlueField" );
+
+ $mapUse = `checkBox -q -v $checkBox`;
+ $mapSrcRed = `floatField -q -v $SrcRedField`;
+ $mapSrcGreen = `floatField -q -v $SrcGreenField`;
+ $mapSrcBlue = `floatField -q -v $SrcBlueField`;
+ $mapTolerance = `floatField -q -v $ToleranceField`;
+ $mapDstRed = `floatField -q -v $DstRedField`;
+ $mapDstGreen = `floatField -q -v $DstGreenField`;
+ $mapDstBlue = `floatField -q -v $DstBlueField`;
+
+ if ($mapUse)
+ {
+ $mapsSrcRed[$numMapsInUse] = $mapSrcRed;
+ $mapsSrcGreen[$numMapsInUse] = $mapSrcGreen;
+ $mapsSrcBlue[$numMapsInUse] = $mapSrcBlue;
+ $mapsTolerance[$numMapsInUse] = $mapTolerance;
+ $mapsDstRed[$numMapsInUse] = $mapDstRed;
+ $mapsDstGreen[$numMapsInUse] = $mapDstGreen;
+ $mapsDstBlue[$numMapsInUse] = $mapDstBlue;
+
+ $numMapsInUse++;
+ }
+
+ string $varName = ( "P3D_" + $mapName );
+ optionVar -intValue ( $varName + "Use" ) $mapUse;
+ optionVar -floatValue ( $varName + "SrcRed" ) $mapSrcRed;
+ optionVar -floatValue ( $varName + "SrcGreen" ) $mapSrcGreen;
+ optionVar -floatValue ( $varName + "SrcBlue" ) $mapSrcBlue;
+ optionVar -floatValue ( $varName + "Tolerance" ) $mapTolerance;
+ optionVar -floatValue ( $varName + "DstRed" ) $mapDstRed;
+ optionVar -floatValue ( $varName + "DstGreen" ) $mapDstGreen;
+ optionVar -floatValue ( $varName + "DstBlue" ) $mapDstBlue;
+
+ }
+
+ // Do the action
+ if( $forward == 1 )
+ {
+ mappedColour $mapsSrcRed $mapsSrcGreen $mapsSrcBlue $mapsDstRed $mapsDstGreen $mapsDstBlue $mapsTolerance;
+ }
+ else
+ {
+ mappedColour $mapsDstRed $mapsDstGreen $mapsDstBlue $mapsSrcRed $mapsSrcGreen $mapsSrcBlue $mapsTolerance;
+ }
+
+ clear $mapsSrcRed;
+ clear $mapsSrcGreen;
+ clear $mapsSrcBlue;
+ clear $mapsTolerance;
+ clear $mapsDstRed;
+ clear $mapsDstGreen;
+ clear $mapsDstBlue;
+
+ waitCursor -state off;
+}
+
+// Deselect all maps and set their colour values to zero.
+global proc P3Dmp_resetAllValues ( int $mpNumMaps )
+{
+ string $cancel = `confirmDialog -message "Reset map values to zero. Are you sure?"
+ -button "Yes" -button "No"
+ -defaultButton "No" -cancelButton "No" -dismissString "No"`;
+
+ if ($cancel == "No")
+ return;
+
+ int $i;
+
+ for( $i = 1; $i <= $mpNumMaps; $i++ )
+ {
+ string $mapName = ( "mpMap" + $i );
+ int $mapUse;
+
+ string $checkBox = ( $mapName + "CheckBox" );
+ string $MinField = ( $mapName + "MinField" );
+ string $MaxField = ( $mapName + "MaxField" );
+ string $SrcRedField = ( $mapName + "SrcRedField" );
+ string $SrcGreenField = ( $mapName + "SrcGreenField" );
+ string $SrcBlueField = ( $mapName + "SrcBlueField" );
+ string $ToleranceField = ( $mapName + "ToleranceField" );
+ string $DstRedField = ( $mapName + "DstRedField" );
+ string $DstGreenField = ( $mapName + "DstGreenField" );
+ string $DstBlueField = ( $mapName + "DstBlueField" );
+
+ checkBox -edit -v 0 $checkBox;
+ floatField -edit -v 0 $MinField;
+ floatField -edit -v 0 $MaxField;
+ floatField -edit -v 0 $SrcRedField;
+ floatField -edit -v 0 $SrcGreenField;
+ floatField -edit -v 0 $SrcBlueField;
+ floatField -edit -v 0.01 $ToleranceField;
+ floatField -edit -v 0 $DstRedField;
+ floatField -edit -v 0 $DstGreenField;
+ floatField -edit -v 0 $DstBlueField;
+
+ P3Dmp_changeMapUse ( $i );
+ P3Dmp_changeMapRGB ( $i, "Src" );
+ P3Dmp_changeMapRGB ( $i, "Dst" );
+
+ string $varName = ( "P3D_" + $mapName );
+ optionVar -intValue ( $varName + "Use" ) 0;
+ optionVar -floatValue ( $varName + "Min" ) 0;
+ optionVar -floatValue ( $varName + "Max" ) 0;
+ optionVar -floatValue ( $varName + "SrcRed" ) 0;
+ optionVar -floatValue ( $varName + "SrcGreen" ) 0;
+ optionVar -floatValue ( $varName + "SrcBlue" ) 0;
+ optionVar -floatValue ( $varName + "Tolerance" ) 0.01;
+ optionVar -floatValue ( $varName + "DstRed" ) 0;
+ optionVar -floatValue ( $varName + "DstGreen" ) 0;
+ optionVar -floatValue ( $varName + "DstBlue" ) 0;
+ }
+}
+
+//==================================================================
+//
+// File IO
+//
+//==================================================================
+
+// Read in a colour map from file.
+global proc P3Dmp_openColourMap ( int $mpNumMaps, string $srcDst, string $fileName, string $fileType )
+{
+ if( $fileName == "" )
+ {
+ print ("Open cancelled.\n");
+ return; // Dialogue cancelled
+ }
+ print ("Retrieving map.\n");
+
+ int $i;
+
+ int $n_lines;
+ string $lines[];
+ int $fileId = `fopen $fileName "r"`;
+
+ if ( $fileId != 0 )
+ {
+ // Store each valid data line of the file in array.
+ string $nextLine = `fgetline $fileId`;
+ while( size( $nextLine ) > 0 )
+ {
+ // Discard comments and blank lines
+ string $ch = `substring $nextLine 1 1`;
+ if( $ch != "#" && $ch != "\n" )
+ {
+ $lines[$n_lines] = $nextLine;
+ $n_lines++;
+ }
+
+ // Get the next line
+ $nextLine = `fgetline $fileId`;
+ }
+ fclose($fileId);
+ }
+ else
+ {
+ print ("Unable to read from " + $fileName + "\n");
+ return;
+ }
+
+ int $maxMapNumber = $lines[0];
+
+ // Ensure that the correct number of valid lines were read.
+ if( ( $maxMapNumber * 3 ) != ( $n_lines - 1 ) )
+ {
+ warning -sl true ( "Invalid data in file: " + $fileName );
+ warning "Map not loaded";
+
+ return;
+ }
+
+ int $mapUse[];
+ float $mapMin[], $mapMax[], $mapTolerance[];
+ float $mapRed[], $mapGreen[], $mapBlue[];
+ int $lineNumber = 1;
+ int $readError = false;
+
+ // Read in the data for each map.
+ // Perform simple check for data format error.
+ for( $i = 1; $i <= $maxMapNumber; $i++ )
+ {
+ $mapUse[$i] = $lines[$lineNumber++];
+
+ string $minmax[];
+ tokenize $lines[$lineNumber++] $minmax;
+ if( size($minmax) != 2 && size($minmax) != 3 )
+ {
+ $readError = true;
+ break;
+ }
+
+ $mapMin[$i] = $minmax[0];
+ $mapMax[$i] = $minmax[1];
+ if( size($minmax) == 2 )
+ {
+ $mapTolerance[$i] = 0.01;
+ }
+ else
+ {
+ $mapTolerance[$i] = $minmax[2];
+ }
+
+ clear $minmax;
+
+ string $rgb[];
+ tokenize $lines[$lineNumber++] $rgb;
+ if( size($rgb) != 3 )
+ {
+ $readError = true;
+ break;
+ }
+ $mapRed[$i] = $rgb[0];
+ $mapGreen[$i] = $rgb[1];
+ $mapBlue[$i] = $rgb[2];
+ clear $rgb;
+ }
+ if( $readError )
+ {
+ warning -sl true ( "Invalid data in file: " + $fileName );
+ warning "Map not loaded";
+
+ return;
+ }
+
+ clear $lines;
+
+ // Now update the UI and Maya's persistent data.
+ for( $i = 1; $i <= $maxMapNumber; $i++ )
+ {
+ string $mapName = ( "mpMap" + $i );
+ string $mapName2 = ( $mapName + $srcDst );
+ string $varName = ( "P3D_" + $mapName );
+ string $varName2 = ( $varName + $srcDst );
+
+ if( $srcDst == "Src" )
+ {
+ optionVar -intValue ( $varName + "Use" ) $mapUse[$i];
+ optionVar -floatValue ( $varName + "Min" ) $mapMin[$i];
+ optionVar -floatValue ( $varName + "Max" ) $mapMax[$i];
+ optionVar -floatValue ( $varName + "Tolerance" ) $mapTolerance[$i];
+ }
+ optionVar -floatValue ( $varName2 + "Red" ) $mapRed[$i];
+ optionVar -floatValue ( $varName2 + "Green" ) $mapGreen[$i];
+ optionVar -floatValue ( $varName2 + "Blue" ) $mapBlue[$i];
+
+ if( $srcDst == "Src" )
+ {
+ checkBox -edit -v ( $mapUse[$i] ) ( $mapName + "CheckBox" );
+ floatField -edit -v ( $mapMin[$i] ) ( $mapName + "MinField" );
+ floatField -edit -v ( $mapMax[$i] ) ( $mapName + "MaxField" );
+ floatField -edit -v ( $mapTolerance[$i] ) ( $mapName + "ToleranceField" );
+ }
+ floatField -edit -v ( $mapRed[$i] ) ( $mapName2 + "RedField" );
+ floatField -edit -v ( $mapGreen[$i] ) ( $mapName2 + "GreenField" );
+ floatField -edit -v ( $mapBlue[$i] ) ( $mapName2 + "BlueField" );
+ P3Dmp_changeMapUse ( $i );
+ P3Dmp_changeMapRGB ( $i, $srcDst );
+ }
+
+ clear $mapUse;
+ clear $mapMin;
+ clear $mapMax;
+ clear $mapTolerance;
+ clear $mapRed;
+ clear $mapGreen;
+ clear $mapBlue;
+
+ print ("Open complete.\n");
+}
+
+// Write out a colour map to file.
+global proc P3Dmp_saveColourMap ( int $mpNumMaps, string $srcDst, string $fileName, string $fileType )
+{
+ if( $fileName == "" )
+ {
+ print ("Save cancelled.\n");
+ return; // Dialogue cancelled
+ }
+ print ("Saving map.\n");
+
+ int $i;
+
+ int $fileId = `fopen $fileName "w"`;
+
+ if ( $fileId != 0 )
+ {
+ // Save out the descriptive information
+ string $username = strip( `system "echo %USERNAME%"` );
+ string $date = strip( `system "date /t"` );
+ string $time = strip( `system "time /t"` );
+ fprint $fileId ( "## Generated by " + $username + "\r\n" );
+ fprint $fileId ( "## on " + $date + "\r\n" );
+ fprint $fileId ( "## at " + $time + "\r\n" );
+ fprint $fileId ( "##\r\n" );
+ fprint $fileId ( "## This file contains the map specifications for the\r\n" );
+ fprint $fileId ( "## Maya mappedPrelightWindow mel script.\r\n" );
+ fprint $fileId ( "##\r\n" );
+
+ // Save the number of maps.
+ fprint $fileId ( "# Number of maps\r\n" );
+ fprint $fileId ( "" + $mpNumMaps + "\r\n" );
+
+ for( $i = 1; $i <= $mpNumMaps; $i++ )
+ {
+ string $mapName = ( "mpMap" + $i );
+ string $mapName2 = ( $mapName + $srcDst );
+
+ int $mapUse;
+ float $mapMin, $mapMax, $tolerance;
+ float $mapRed, $mapGreen, $mapBlue;
+
+ $mapUse = `checkBox -q -v ( $mapName + "CheckBox" )`;
+ $mapMin = `floatField -q -v ( $mapName + "MinField" )`;
+ $mapMax = `floatField -q -v ( $mapName + "MaxField" )`;
+ $mapTolerance = `floatField -q -v ( $mapName + "ToleranceField" )`;
+ $mapRed = `floatField -q -v ( $mapName2 + "RedField" )`;
+ $mapGreen = `floatField -q -v ( $mapName2 + "GreenField" )`;
+ $mapBlue = `floatField -q -v ( $mapName2 + "BlueField" )`;
+
+ // Write out the information for this map.
+ fprint $fileId ( "\r\n" );
+ fprint $fileId ( "## Map " + $i + "\r\n" );
+ fprint $fileId ( "# UseMap\r\n" );
+ fprint $fileId ( "" + $mapUse + "\r\n" );
+ fprint $fileId ( "# Min Max Tolerance\r\n" );
+ fprint $fileId ( "" + $mapMin + " " + $mapMax +
+ " " + $mapTolerance + "\r\n" );
+ fprint $fileId ( "# Red Green Blue\r\n" );
+ fprint $fileId ( "" + $mapRed + " " + $mapGreen +
+ " " + $mapBlue + "\r\n" );
+
+ // Save the to Maya's persistent data
+ string $varName = ( "P3D_" + $mapName );
+ string $varName2 = ( "P3D_" + $mapName2 );
+
+ // Save the data to persistent variables
+ optionVar -intValue ( $varName + "Use" ) $mapUse;
+ optionVar -floatValue ( $varName + "Min" ) $mapMin;
+ optionVar -floatValue ( $varName + "Max" ) $mapMax;
+ optionVar -floatValue ( $varName + "Tolerance" ) $mapTolerance;
+ optionVar -floatValue ( $varName2 + "Red" ) $mapRed;
+ optionVar -floatValue ( $varName2 + "Green" ) $mapGreen;
+ optionVar -floatValue ( $varName2 + "Blue" ) $mapBlue;
+ }
+ fclose($fileId);
+ }
+ else
+ {
+ print ("Unable to write to " + $fileName + "\n");
+ return;
+ }
+
+ print ("Save complete.\n");
+}
+
+//==================================================================
+//
+// Starting the UI creation section
+//
+//==================================================================
+
+proc createSamplingOptions ( string $parent )
+{
+ setUITemplate -pushTemplate attributeEditorTemplate;
+ setParent $parent;
+
+ // Place sampling options here.
+
+ setParent ..;
+ setUITemplate -popTemplate;
+}
+
+proc createBasicPrelight ()
+{
+ setUITemplate -pushTemplate attributeEditorTemplate;
+
+ columnLayout
+ -adjustableColumn true
+ mpCreateBasicPrelightLayout;
+ {
+ columnLayout -rs 5-cat "left" 150;
+ {
+ int $performPrelight;
+ if ( `optionVar -exists P3D_mpPerformPrelight` )
+ $performPrelight = `optionVar -q P3D_mpPerformPrelight `;
+ checkBox
+ -value $performPrelight
+ -al left
+ -w 200
+ -label "Prelight on each Apply"
+ performPrelightCheckBox;
+ button
+ -label " Prelight "
+ -height 22
+ -command P3Dmp_performPrelight
+ mpPrelightButton;
+ } setParent ..;
+ } setParent ..;
+
+ setUITemplate -popTemplate;
+}
+
+// Create the UI for one map.
+proc createMapLayout ( int $mapID, int $mpNumMaps )
+{
+ setUITemplate -pushTemplate attributeEditorTemplate;
+
+ string $mapName = ( "mpMap" + $mapID );
+ float $rgbWidth = 45;
+ float $toleranceWidth = 30;
+ float $buttonWidth = 20;
+
+ rowColumnLayout -numberOfColumns 2
+ -rat 1 "top" 5
+ -co 1 "left" 5
+ -columnWidth 1 65
+ -cal 2 "left"
+ -columnWidth 2 500
+ ( $mapName + "Layout" );
+
+ {
+ string $checkCallback = ( "P3Dmp_changeMapUse (" + $mapID + ");" +
+ "P3Dmp_forceValues (" + $mpNumMaps + ")" );
+
+ int $mapUse=0;
+ float $mapMin=0, $mapMax=0;
+ float $mapSrcRed=0, $mapSrcGreen=0, $mapSrcBlue=0;
+ float $mapTolerance=0.01;
+ float $mapDstRed=0, $mapDstGreen=0, $mapDstBlue=0;
+
+ string $varName = ( "P3D_" + $mapName );
+ if ( `optionVar -exists ( $varName + "Use" ) ` )
+ $mapUse = `optionVar -q ( $varName + "Use" ) `;
+ if ( `optionVar -exists ( $varName + "Min" ) ` )
+ $mapMin = `optionVar -q ( $varName + "Min" ) `;
+ if ( `optionVar -exists ( $varName + "Max" ) ` )
+ $mapMax = `optionVar -q ( $varName + "Max" ) `;
+ if ( `optionVar -exists ( $varName + "SrcRed" ) ` )
+ $mapSrcRed = `optionVar -q ( $varName + "SrcRed" ) `;
+ if ( `optionVar -exists ( $varName + "SrcGreen" ) ` )
+ $mapSrcGreen = `optionVar -q ( $varName + "SrcGreen" ) `;
+ if ( `optionVar -exists ( $varName + "SrcBlue" ) ` )
+ $mapSrcBlue = `optionVar -q ( $varName + "SrcBlue" ) `;
+ if ( `optionVar -exists ( $varName + "Tolerance" ) ` )
+ $mapTolerance = `optionVar -q ( $varName + "Tolerance" ) `;
+ if ( `optionVar -exists ( $varName + "DstRed" ) ` )
+ $mapDstRed = `optionVar -q ( $varName + "DstRed" ) `;
+ if ( `optionVar -exists ( $varName + "DstGreen" ) ` )
+ $mapDstGreen = `optionVar -q ( $varName + "DstGreen" ) `;
+ if ( `optionVar -exists ( $varName + "DstBlue" ) ` )
+ $mapDstBlue = `optionVar -q ( $varName + "DstBlue" ) `;
+
+ checkBox
+ -v $mapUse
+ -label ( "Map " + $mapID + ":" )
+ -cc ( $checkCallback )
+ ( $mapName + "CheckBox" );
+
+ columnLayout
+ -adjustableColumn true
+ -rs 3
+ ( $mapName + "DetailsLayout" );
+ {
+ rowColumnLayout -numberOfColumns 10
+ -columnOffset 1 "left" 10
+ -columnWidth 1 ( $rgbWidth + 10 )
+ -columnWidth 2 $rgbWidth
+ -columnOffset 3 "left" 5
+ -columnWidth 3 ( $buttonWidth + 10 )
+ -columnOffset 3 "right" 5
+ -columnWidth 4 $rgbWidth
+ -columnWidth 5 $rgbWidth
+ -columnWidth 6 $rgbWidth
+ -columnWidth 7 ( $buttonWidth + $toleranceWidth + $buttonWidth + 10 )
+ -columnWidth 8 $rgbWidth
+ -columnWidth 9 $rgbWidth
+ -columnWidth 10 ( $rgbWidth + 10 )
+ -columnOffset 10 "right" 10
+ ( $mapName + "SelectSubLayout" );
+ {
+ text -al "center" "Min (0-1)";
+ text -al "center" "Max (0-1)";
+ text -al "center" " ";
+ text -l "Red" -al "center" "SrcRed";
+ text -l "Green" -al "center" "SrcGreen";
+ text -l "Blue" -al "center" "SrcBlue";
+ text -al "center" "Tolerance";
+ text -l "Red" -al "center" "DstRed";
+ text -l "Green" -al "center" "DstGreen";
+ text -l "Blue" -al "center" "DstBlue";
+
+ string $minMaxCallback = ( "P3Dmp_forceValues (" + $mpNumMaps + ")" );
+ string $srcRGBCallback = ( "P3Dmp_changeMapRGB ( " + $mapID + ", \"Src\"" + " )" );
+ string $dstRGBCallback = ( "P3Dmp_changeMapRGB ( " + $mapID + ", \"Dst\"" + " )" );
+ string $buttonCallback = ( "P3Dmp_applyPrelightMaps ( " + $mapID + ", " + $mapID + ")" );
+ string $forwardCallback = ( "P3Dmp_applyColourMaps ( " + $mapID + ", " + $mapID + ", 1 )" );
+ string $backwardCallback = ( "P3Dmp_applyColourMaps ( " + $mapID + ", " + $mapID + ", 0 )" );
+
+ floatField -value $mapMin
+ -cc $minMaxCallback
+ ( $mapName + "MinField" );
+ floatField -value $mapMax
+ -cc $minMaxCallback
+ ( $mapName + "MaxField" );
+ button -l "=>" -c $buttonCallback
+ ( $mapName + "ApplyUpToMap" );
+ floatField -value $mapSrcRed -cc $srcRGBCallback
+ ( $mapName + "SrcRedField" );
+ floatField -value $mapSrcGreen -cc $srcRGBCallback
+ ( $mapName + "SrcGreenField" );
+ floatField -value $mapSrcBlue -cc $srcRGBCallback
+ ( $mapName + "SrcBlueField" );
+
+ rowColumnLayout -numberOfColumns 3
+ -columnOffset 1 "left" 5
+ -columnWidth 1 ( $buttonWidth + 5 )
+ -columnWidth 2 $toleranceWidth
+ -columnWidth 3 ( $buttonWidth + 5 )
+ -columnOffset 3 "right" 5
+ ( $mapName + "ToleranceSubLayout" );
+ {
+ button -l "<-" -c $backwardCallback
+ ( $mapName + "ApplyForward" );
+ floatField -value $mapTolerance
+ ( $mapName + "ToleranceField" );
+ button -l "->" -c $forwardCallback
+ ( $mapName + "ApplyBackward" );
+ } setParent ..;
+
+ floatField -value $mapDstRed -cc $dstRGBCallback
+ ( $mapName + "DstRedField" );
+ floatField -value $mapDstGreen -cc $dstRGBCallback
+ ( $mapName + "DstGreenField" );
+ floatField -value $mapDstBlue -cc $dstRGBCallback
+ ( $mapName + "DstBlueField" );
+
+ } setParent ..; // rowColumnLayout -numberOfColumns 10
+
+ rowColumnLayout -numberOfColumns 2
+ -columnOffset 1 "left" 0
+ -columnWidth 1 325
+ -columnWidth 2 300
+ -columnOffset 2 "right" 10
+ ( $mapName + "ColorsSublayout" );
+ {
+ string $srcColorSliderCallback = ( "P3Dmp_changeMapRGBSlider (" + $mapID + ", \"Src\"" + ")" );
+ string $dstColorSliderCallback = ( "P3Dmp_changeMapRGBSlider (" + $mapID + ", \"Dst\"" + ")" );
+ colorSliderButtonGrp
+ -rgbValue $mapSrcRed $mapSrcGreen $mapSrcBlue
+ -cat 1 "left" 115
+ -cw 1 10
+ -cw 2 50
+ -cw 3 115
+ -cat 4 "left" 500
+ -cw 4 180
+ -label ""
+ -symbolButtonDisplay false
+ -cc $srcColorSliderCallback
+ ( $mapName + "SrcColorSlider" );
+ colorSliderButtonGrp
+ -rgbValue $mapDstRed $mapDstGreen $mapDstBlue
+ -cw 1 10
+ -cw 2 50
+ -cw 3 115
+ -cat 4 "left" 500
+ -cw 4 180
+ -label ""
+ -symbolButtonDisplay false
+ -cc $dstColorSliderCallback
+ ( $mapName + "DstColorSlider" );
+
+ } setParent ..; // rowColumnLayout -numberOfColumns 2
+
+ } setParent ..; // columnLayout
+
+ columnLayout -edit
+ -enable $mapUse
+ ( $mapName + "DetailsLayout" );
+
+ } setParent ..; //rowColumnLayout -numberOfColumns 2
+
+ setUITemplate -popTemplate;
+}
+
+// Create the maps section of the UI
+proc createMappedPrelight ( int $mpNumMaps )
+{
+ setUITemplate -pushTemplate attributeEditorTemplate;
+
+ columnLayout
+ -adjustableColumn true
+ mpLayout;
+ {
+ columnLayout -rs 5 -cat "left" 150;
+ {
+ int $forceMinValue;
+ if ( `optionVar -exists P3D_mpforceMinValue` )
+ $forceMinValue = `optionVar -q P3D_mpforceMinValue`;
+ string $forceCallback = ( "P3Dmp_forceValues ( " + $mpNumMaps + " ) " );
+ checkBox
+ -value $forceMinValue
+ -al left
+ -w 200
+ -label "Force minimum values"
+ -cc $forceCallback
+ forceMinValueCheckBox;
+ int $useAveSides;
+ if ( `optionVar -exists P3D_mpUseAveSides` )
+ $useAveSides = `optionVar -q P3D_mpUseAveSides`;
+ checkBox
+ -value $useAveSides
+ -al left
+ -w 200
+ -label "Use average of side vertex colours"
+ useAverageSideCheckBox;
+ string $averageCallback = "waitCursor -st on; avePrelight; waitCursor -st off;";
+ button
+ -label " Set to average "
+ -height 22
+ -command $averageCallback
+ mpAverageSideButton;
+ } setParent ..;
+
+ separator;
+ rowColumnLayout -numberOfColumns 2
+ -rat 1 "top" 5
+ -co 1 "left" 212
+ -columnWidth 1 312
+ -cal 2 "left"
+ -columnWidth 2 330
+ "P3mp_colourHeader";
+ {
+ text -al "center" "Colour 1";
+ text -al "center" "Colour 2";
+ } setParent ..;
+
+ int $i;
+ for ( $i = 1; $i <= $mpNumMaps ; $i++ )
+ {
+ separator;
+ createMapLayout ( $i, $mpNumMaps );
+ }
+
+ } setParent ..;
+
+ setUITemplate -popTemplate;
+}
+
+// Create the main window for all prelighting.
+global proc mappedPrelightWindow()
+{
+ int $mpNumMaps = 6;
+ string $windowName = "mappedPrelightWindow";
+ string $windowTitle = "Mapped Prelight (ver. 1.2.0 April 12, 2002)";
+ string $iconTitle = "Map Prelight";
+ int $windowWidth = 450;
+ int $windowHeight = 500;
+ int $windowPosTop = 200;
+ int $windowPosLft = 220;
+
+ // If the window already exists, just make it visible.
+ if (`window -exists $windowName`)
+ {
+ showWindow $windowName;
+ P3Dmp_updateAllMappedPrelightGlobal( $mpNumMaps );
+ return;
+ }
+
+ // No window exists so build it.
+ window
+ -t $windowTitle
+ -in $iconTitle
+ -wh $windowWidth $windowHeight
+ -tlc $windowPosTop $windowPosLft
+ -mb true
+ $windowName;
+
+ // Create the menus
+ menu -l "File";
+ menuItem -l "New colour map"
+ -c ( "P3Dmp_resetAllValues( " + $mpNumMaps + " )" );
+ string $openColour1Callback = ("fileBrowserDialog -m 0 -fc \"P3Dmp_openColourMap " +
+ $mpNumMaps + " Src \" -ft map -an Open" );
+ menuItem -l "Open colour 1..."
+ -c $openColour1Callback;
+ string $openColour1Callback = ("fileBrowserDialog -m 0 -fc \"P3Dmp_openColourMap " +
+ $mpNumMaps + " Dst \" -ft map -an Open" );
+ menuItem -l "Open colour 2..."
+ -c $openColour1Callback;
+ menuItem -d true;
+ string $saveColour1Callback = ("fileBrowserDialog -m 1 -fc \"P3Dmp_saveColourMap " +
+ $mpNumMaps + " Src \" -ft map -an Save" );
+ menuItem -l "Save colour 1..."
+ -c $saveColour1Callback;
+ string $saveColour2Callback = ("fileBrowserDialog -m 1 -fc \"P3Dmp_saveColourMap " +
+ $mpNumMaps + " Dst \" -ft map -an Save" );
+ menuItem -l "Save colour 2..."
+ -c $saveColour2Callback;
+
+// menu -l "Edit";
+
+ // Create the help menu
+ addContextHelpProc "mappedPrelightWindow" "P3Dmp_buildMappedPrelightContextHelpItems";
+ doHelpMenu "mappedPrelightWindow" "mappedPrelightWindow";
+
+ // Create main form
+ setUITemplate -pushTemplate attributeEditorTemplate;
+
+ formLayout
+ mpMainForm;
+ {
+ scrollLayout
+ -hst 0 mpMainLayout;
+ {
+ columnLayout -adjustableColumn true mpMainColumnLayout;
+ {
+ // Sampling Options
+ frameLayout -label "Sampling Options"
+ -cll 1 -cl 1
+ -preExpandCommand "createSamplingOptions (\"mpSamplingOptionsFrame\")"
+ mpSamplingOptionsFrame;
+ {
+ } setParent ..;
+
+ // Basic Prelight
+ frameLayout -label "Basic Prelight"
+ -cll 1 -cl 1
+ mpBasicPrelight;
+ {
+ createBasicPrelight();
+ } setParent ..;
+
+ // Mapped Prelight
+ frameLayout -label "Mapped Prelight"
+ -cll 1 -cl 0
+ mpMappedPrelight;
+ {
+ createMappedPrelight ( $mpNumMaps );
+ } setParent ..; // mpMainColumnLayout
+ } setParent..; // mpMainLayout
+ } setParent..; // mpMainForm
+ } setParent..; // $windowName
+
+ // Create the main window action buttons
+
+ formLayout
+ -numberOfDivisions 5
+ mpActionButtons;
+ {
+
+ button
+ -label "Prelight => Colour 1"
+ -height 26
+ -command ( "P3Dmp_applyPrelightMaps( 1, " + $mpNumMaps + " )" )
+ mpApplyButton;
+ button
+ -label "Colour 1 <- Colour 2"
+ -command ( "P3Dmp_applyColourMaps( 1, " + $mpNumMaps + ", 0 )" )
+ -height 26
+ mpBackwardButton;
+ button
+ -label "Colour 1 -> Colour 2"
+ -command ( "P3Dmp_applyColourMaps( 1, " + $mpNumMaps + ", 1 )" )
+ -height 26
+ mpForwardButton;
+ button
+ -label "Reset"
+ -height 26
+ -command ( "P3Dmp_resetAllValues( " + $mpNumMaps + " )" )
+ mpResetButton;
+ button
+ -label "Close"
+ -height 26
+ -command ( "deleteUI " + $windowName )
+ mpCloseButton;
+
+ formLayout
+ -edit
+ -af mpApplyButton left 5
+ -ap mpApplyButton right 2 1
+ -af mpApplyButton top 5
+ -af mpApplyButton bottom 5
+
+ -ap mpBackwardButton left 3 1
+ -ap mpBackwardButton right 2 2
+ -af mpBackwardButton top 5
+ -af mpBackwardButton bottom 5
+
+ -ap mpForwardButton left 3 2
+ -ap mpForwardButton right 2 3
+ -af mpForwardButton top 5
+ -af mpForwardButton bottom 5
+
+ -ap mpResetButton left 3 3
+ -ap mpResetButton right 2 4
+ -af mpResetButton top 5
+ -af mpResetButton bottom 5
+
+ -ap mpCloseButton left 3 4
+ -af mpCloseButton right 5
+ -af mpCloseButton top 5
+ -af mpCloseButton bottom 5
+ mpActionButtons;
+ } setParent ..; // mpActionButtons
+
+ // Set the layout
+ formLayout -edit
+ -af mpMainLayout "top" 0
+ -af mpMainLayout "left" 0
+ -af mpMainLayout "right" 0
+ -ac mpMainLayout "bottom" 5 mpActionButtons
+
+ -an mpActionButtons "top"
+ -af mpActionButtons "bottom" 5
+ -af mpActionButtons "left" 5
+ -af mpActionButtons "right" 5
+ mpMainForm;
+
+ setUITemplate -popTemplate ;
+
+ // Make sure associated procedures are loaded
+ source mappedPrelight;
+
+ // Make the window visible
+ showWindow $windowName;
+
+ // Apply any other global settings to the window.
+ P3Dmp_updateAllMappedPrelightGlobal( $mpNumMaps );
+}
+
+
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/nameSpaceGui.mel b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/nameSpaceGui.mel
new file mode 100644
index 0000000..6648922
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/nameSpaceGui.mel
@@ -0,0 +1,74 @@
+global string $g_P3DNameSpaceField;
+
+global proc P3DRemoveNameSpaceTool_RemoveNameSpace(string $selectedNodes[], string $nameSpace)
+{
+ print "called P3DRemoveNameSpaceTool_RemoveNameSpace for:";
+ print $selectedNodes;
+ print "\n";
+ for($node in $selectedNodes)
+ {
+ string $newName = `substitute $nameSpace $node ""`;
+ if($newName != "")
+ {
+ rename -is $node $newName;
+ }
+ }
+}
+
+global proc P3DRemoveNameSpaceTool_RemoveSelected()
+{
+ global string $g_P3DNameSpaceField;
+ string $nameSpace = `textField -q -text $g_P3DNameSpaceField`;
+ string $selectedNodes[] = `ls -sl`;
+
+ P3DRemoveNameSpaceTool_RemoveNameSpace( $selectedNodes, $nameSpace );
+}
+
+global proc P3DRemoveNameSpaceTool_RemoveHierarchy()
+{
+ global string $g_P3DNameSpaceField;
+ string $nameSpace = `textField -q -text $g_P3DNameSpaceField`;
+ select -add -hi;
+ string $selectedNodes[] = `ls -sl`;
+
+ P3DRemoveNameSpaceTool_RemoveNameSpace( $selectedNodes, $nameSpace );
+}
+
+
+global proc P3DRemoveNameSpaceTool_GUICreate()
+{
+ string $windowName = "P3DRemoveNameSpaceTool";
+
+ global string $g_P3DNameSpaceField;
+
+ if (`window -query -exists $windowName`!=1)
+ {
+ window
+ -width 300
+ -height 140
+ -minimizeButton false
+ -maximizeButton false
+ -sizeable false
+ -title $windowName
+ $windowName;
+
+ columnLayout
+ -adjustableColumn true
+ -columnAlign "left"
+ -cat "left" 5;
+
+ text -l "NameSpace";
+ $g_P3DNameSpaceField = `textField -width 200`;
+
+ button
+ -label "Remove Selected"
+ -command "P3DRemoveNameSpaceTool_RemoveSelected()";
+ button
+ -label "Remove Hierarchy"
+ -command "P3DRemoveNameSpaceTool_RemoveHierarchy()";
+
+ showWindow $windowName;
+ }
+}
+
+P3DRemoveNameSpaceTool_GUICreate(); \ No newline at end of file
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/optimizeShaders.mel b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/optimizeShaders.mel
new file mode 100644
index 0000000..8ddc804
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/optimizeShaders.mel
@@ -0,0 +1,1046 @@
+//===========================================================================
+// Copyright ©2002 Radical Entertainment Ltd. All rights reserved.
+//
+// Created: 17 April, 2002
+//
+// Component: optimizeShaders.mel
+//
+// Description: Sorts file textures by their '.fileTextureName' attributes,
+// and for those whose input file matches compares all input
+// attributes to see if they can be considered equivalent.
+// Equivalent file textures are "merged" so one serves the
+// duties previously served by both.
+//
+// Materials and Shading Groups are evaluated and optimized
+// in similar fashion.
+//
+// Constraints:
+//
+// Creator: Bryan Ewert
+//
+//===========================================================================
+
+
+//===========================================================================
+// version
+//===========================================================================
+// Description: Returns the current version for this MEL script.
+// Used for version control.
+//
+// Constraints: Used with assertCurrent().
+//
+//===========================================================================
+proc float version()
+{
+ return ( 1.1 );
+}
+
+// ////////////////////////////////////////////////////////////////
+// rootNode
+//
+// Description: Strips the dot-suffix of the specified string.
+// e.g. "object.attribute" is returned as "object"
+proc string rootNode( string $object )
+{
+ string $buffer[];
+ tokenize $object "." $buffer;
+ return $buffer[0];
+}
+
+//===========================================================================
+// hasInput
+//===========================================================================
+// Description: Returns TRUE if specified attribute has an input connection.
+//
+// Constraints:
+//
+// Parameters: string $node: The node.
+// string $attr: The attribute.
+//
+// Return: TRUE if specified attribute has an input connection;
+// else FALSE.
+//
+//===========================================================================
+proc int hasInput( string $node, string $attr )
+{
+ int $hasInput = false;
+ if ( `attributeQuery -node $node -exists $attr` )
+ {
+ string $c[] = `listConnections -d false -s true ( $node + "." + $attr )`;
+ $hasInput = ( $c[0] != "" );
+ }
+ return $hasInput;
+}
+
+//===========================================================================
+// isMinorType
+//===========================================================================
+// Description: Compares the type of the specified node against those in
+// a static list. If the type matches it is considered a
+// minor type. This is used to determine the "significance"
+// of a connection to a node. If a node's connections serve
+// only nodes of these types then it is assumed that the node
+// may be safely deleted without impacting scene requirements.
+//
+// Constraints:
+//
+// Parameters: string $node: The node to evaluate.
+//
+// Return: (int): TRUE if specified node is a minor type; else FALSE.
+//
+//===========================================================================
+proc int isMinorType( string $node )
+{
+ int $isMinorType = false;
+
+ string $minorNodeTypes[] =
+ {
+ "defaultLightList",
+ "defaultRenderUtilityList",
+ "defaultShaderList",
+ "defaultTextureList",
+ "lightLinker",
+ "materialInfo",
+ "partition"
+ };
+
+ string $nodeType = `nodeType $node`;
+
+ for ( $minor in $minorNodeTypes )
+ {
+ if ( $minor == $nodeType )
+ {
+ $isMinorType = true;
+ break;
+ }
+ }
+
+ return $isMinorType;
+}
+
+//===========================================================================
+// hasOnlyMinorOutputConnections
+//===========================================================================
+// Description: Considers all output connections from the specified node
+// and determines if all of them may be considered "minor."
+// A minor connection is one which serves only the node in
+// question and not other parts of the scene. If a node
+// provides no connections to other significant nodes in the
+// scene it may be considered safe to delete without impacting
+// scene requirements.
+//
+// Constraints:
+//
+// Parameters: string $node: The node to evaluate.
+//
+// Return: (int): TRUE if all output connections are minor, or if node
+// has no output connections; FALSE if at least one
+// non-minor connection exists.
+//
+//===========================================================================
+proc int hasOnlyMinorOutputConnections( string $node )
+{
+ int $onlyMinorTypes = true;
+
+ string $outputs[] = `listConnections -s false -d true $node`;
+ for ( $c in $outputs )
+ {
+ if ( !isMinorType( $c ) )
+ {
+ $onlyMinorTypes = false;
+ break;
+ }
+ }
+
+ return $onlyMinorTypes;
+}
+
+//===========================================================================
+// safeDelete
+//===========================================================================
+// Description: Deletes the specified node _only_ if it is considered to have
+// little impact on the scene.
+//
+// All nodes providing input connections to the specified node
+// are evaluated in iterative fashion.
+//
+// Constraints:
+//
+// Parameters: string $node: The node that will be deleted.
+//
+// Return: (none)
+//
+//===========================================================================
+proc safeDelete( string $node )
+{
+ if ( `objExists $node` )
+ {
+ string $inputs[] = `listConnections -s true -d false $node`;
+
+ if ( hasOnlyMinorOutputConnections( $node ) )
+ {
+ delete $node;
+ }
+
+ for ( $i in $inputs )
+ {
+ safeDelete( $i );
+ }
+ }
+}
+
+//===========================================================================
+// compareInt
+//===========================================================================
+// Description: Performs an integer comparison for one attribute on
+// two nodes.
+//
+// Constraints: This handles all "int" relatives; e.g. enum, short, bool.
+//
+// Parameters: string $node1: The first node.
+// string $node2: The second node.
+// string $attr: The attribute for both nodes which is compared.
+//
+// Return: (int): TRUE if attributes match; else FALSE.
+//
+//===========================================================================
+proc int compareInt( string $node1, string $node2, string $attr )
+{
+ int $i1 = `getAttr ( $node1 + "." + $attr )`;
+ int $i2 = `getAttr ( $node2 + "." + $attr )`;
+ return ( $i1 == $i2 );
+}
+
+//===========================================================================
+// compareFloat
+//===========================================================================
+// Description: Performs a float comparison for one attribute on
+// two nodes.
+//
+// Constraints: This handles all "float" relatives; e.g. doubleAngle
+//
+// Parameters: string $node1: The first node.
+// string $node2: The second node.
+// string $attr: The attribute for both nodes which is compared.
+//
+// Return: (int): TRUE if attributes match; else FALSE.
+//
+//===========================================================================
+proc int compareFloat( string $node1, string $node2, string $attr )
+{
+ float $f1 = `getAttr ( $node1 + "." + $attr )`;
+ float $f2 = `getAttr ( $node2 + "." + $attr )`;
+ return ( $f1 == $f2 );
+}
+
+//===========================================================================
+// compareFloat2
+//===========================================================================
+// Description: Performs a float2 comparison (i.e. array of two floats)
+// for one attribute on two nodes.
+//
+// Constraints:
+//
+// Parameters: string $node1: The first node.
+// string $node2: The second node.
+// string $attr: The attribute for both nodes which is compared.
+//
+// Return: (int): TRUE if attributes match; else FALSE.
+//
+//===========================================================================
+proc int compareFloat2( string $node1, string $node2, string $attr )
+{
+ float $f1[2] = `getAttr ( $node1 + "." + $attr )`;
+ float $f2[2] = `getAttr ( $node2 + "." + $attr )`;
+ return ( ( $f1[0] == $f2[0] ) && ( $f1[1] == $f2[1] ) );
+}
+
+//===========================================================================
+// compareFloat3
+//===========================================================================
+// Description: Performs a vector comparison for one attribute on
+// two nodes. This would commonly be used to compare
+// color attributes.
+//
+// Constraints:
+//
+// Parameters: string $node1: The first node.
+// string $node2: The second node.
+// string $attr: The attribute for both nodes which is compared.
+//
+// Return: (int): TRUE if attributes match; else FALSE.
+//
+//===========================================================================
+proc int compareFloat3( string $node1, string $node2, string $attr )
+{
+ float $f1[3] = `getAttr ( $node1 + "." + $attr )`;
+ float $f2[3] = `getAttr ( $node2 + "." + $attr )`;
+ return ( ( $f1[0] == $f2[0] ) && ( $f1[1] == $f2[1] ) && ( $f1[2] == $f2[2] ) );
+}
+
+//===========================================================================
+// compareString
+//===========================================================================
+// Description: Performs a string comparison for one attribute on
+// two nodes.
+//
+// Constraints:
+//
+// Parameters: string $node1: The first node.
+// string $node2: The second node.
+// string $attr: The attribute for both nodes which is compared.
+//
+// Return: (int): TRUE if attributes match; else FALSE.
+//
+//===========================================================================
+proc int compareString( string $node1, string $node2, string $attr )
+{
+ string $s1 = `getAttr ( $node1 + "." + $attr )`;
+ string $s2 = `getAttr ( $node1 + "." + $attr )`;
+ return ( $s1 == $s2 );
+}
+
+//===========================================================================
+// compareConnections
+//===========================================================================
+// Description: Compares the connections for one attribute on two nodes.
+//
+// If neither attribute is connected, the attributes match.
+//
+// If one attribute is connected but the other is not, then
+// the attributes do not match.
+//
+// If both attributes are connected there is a match only if
+// both connections are to the same node.
+//
+// Constraints:
+//
+// Parameters: string $node1: The first node.
+// string $node2: The second node.
+// string $attr: The attribute for both nodes which is compared.
+//
+// Return: (int): TRUE if attributes match; else FALSE.
+//
+//===========================================================================
+proc int compareConnections( string $node1, string $node2, string $attr )
+{
+ // If neither has this attribute, consider it a match.
+ if ( !`attributeQuery -node $node1 -exists $attr` && !`attributeQuery -node $node2 -exists $attr` )
+ {
+ return true;
+ }
+
+ // If one has the attribute, but the other doesn't, no match.
+ if (
+ ( `attributeQuery -node $node1 -exists $attr` && !`attributeQuery -node $node2 -exists $attr` ) ||
+ ( !`attributeQuery -node $node1 -exists $attr` && `attributeQuery -node $node2 -exists $attr` )
+ )
+ {
+ return false;
+ }
+
+ string $c1[] = `listConnections -d false -s true ( $node1 + "." + $attr )`;
+ string $c2[] = `listConnections -d false -s true ( $node2 + "." + $attr )`;
+
+ // TRUE if neither or connected, or both are connected to the same node.
+ return ( $c1[0] == $c2[0] );
+}
+
+//===========================================================================
+// compareAttributes
+//===========================================================================
+// Description: Compares the value for one attribute on two nodes.
+// The attribute type is used to determine the type of
+// comparison performed. The attribute must exist on both
+// nodes, and the attribute type must be the same for both
+// nodes, else the two do not match.
+//
+// Constraints:
+//
+// Parameters: string $node1: The first node.
+// string $node2: The second node.
+// string $attr: The attribute for both nodes which is compared.
+//
+// Return: (int): TRUE if attributes match; else FALSE.
+//
+//===========================================================================
+proc int compareAttributes( string $node1, string $node2, string $attr )
+{
+ int $isEqual = true;
+
+ // If neither has this attribute, consider it a match.
+ if ( !`attributeQuery -node $node1 -exists $attr` && !`attributeQuery -node $node2 -exists $attr` )
+ {
+ // Some objects have different attributes than others (e.g. lambert and layered shaders)
+// warning( "! Attributes don't exist in compareAttributes( " + $node1 + ", " + $node2 + " ) !" );
+ return true;
+ }
+
+ // If one has the attribute, but the other doesn't, no match.
+ if (
+ ( `attributeQuery -node $node1 -exists $attr` && !`attributeQuery -node $node2 -exists $attr` ) ||
+ ( !`attributeQuery -node $node1 -exists $attr` && `attributeQuery -node $node2 -exists $attr` )
+ )
+ {
+ // This would be a bug. The script should take care that this will not happen.
+ warning( "! Attribute mismatch in compareAttributes( " + $node1 + ", " + $node2 + " ) !" );
+ return false;
+ }
+
+ // If one is connected but the other isn't, don't consider them equal.
+ if ( ( hasInput( $node1, $attr ) && !hasInput( $node2, $attr ) ) ||
+ ( !hasInput( $node1, $attr ) && hasInput( $node2, $attr ) )
+ )
+ {
+// warning( "! Connection mismatch in compareAttributes( " + $node1 + ", " + $node2 + " ) !" );
+ return false;
+ }
+
+ string $attrType1 = `getAttr -type ( $node1 + "." + $attr )`;
+ string $attrType2 = `getAttr -type ( $node2 + "." + $attr )`;
+
+ if ( $attrType1 != $attrType2 ) return false;
+
+ switch ( $attrType1 )
+ {
+ case "bool":
+ case "enum":
+ case "short":
+ {
+ $isEqual = compareInt( $node1, $node2, $attr );
+ break;
+ }
+ case "doubleAngle":
+ case "float":
+ {
+ $isEqual = compareFloat( $node1, $node2, $attr );
+ break;
+ }
+ case "float2":
+ {
+ $isEqual = compareFloat2( $node1, $node2, $attr );
+ break;
+ }
+ case "float3":
+ {
+ // As if this will work... likely a colour attribute and
+ // this will just compare black to black.
+ $isEqual = compareFloat3( $node1, $node2, $attr );
+ break;
+ }
+ case "string":
+ {
+ $isEqual = compareString( $node1, $node2, $attr );
+ break;
+ }
+ default:
+ {
+ error ( "Unsupported attribute type: " + $attrType1 );
+ break;
+ }
+ }
+
+ return $isEqual;
+}
+
+//===========================================================================
+// mergeShadingGroup
+//===========================================================================
+// Description: The two Shading Groups have been deemed to be equal.
+// The members for the latter are assigned to the former and
+// the latter is deleted from the scene.
+//
+// Constraints:
+//
+// Parameters: string $sg1: The Shading Group to keep.
+// string $sg2: The Shading Group to discard.
+//
+// Return: (none)
+//
+//===========================================================================
+proc mergeShadingGroup( string $sg1, string $sg2 )
+{
+ string $members[] = `sets -q $sg2`;
+ if ( `size $members` > 0 ) // just to avert useless Maya warning
+ {
+ sets -forceElement $sg1 $members;
+ }
+ safeDelete( $sg2 );
+}
+
+//===========================================================================
+// compareShadingGroups
+//===========================================================================
+// Description: Compares the connections and attributes for two specified
+// Shading Groups and evaluates if they can be considered
+// equivalent. If equivalent, the two are merged.
+//
+// Constraints: If the two Shading Groups are equal, $sg2 will likely be
+// deleted from the scene and will not exist when this function
+// call returns.
+//
+// Parameters: string $sg1: The first Shading Group.
+// string $sg2: The second Shading Group.
+//
+// Return: (int): TRUE if the two Shading Groups are equal; else FALSE.
+// If TRUE it is likely that $sg2 was deleted.
+//
+//===========================================================================
+proc int compareShadingGroups( string $sg1, string $sg2 )
+{
+ int $isEqual = true;
+
+ // Has same alpha?
+ $isEqual = $isEqual && compareConnections( $sg1, $sg2, "surfaceShader" );
+
+ $isEqual = $isEqual && compareConnections( $sg1, $sg2, "volumeShader" );
+
+ $isEqual = $isEqual && compareConnections( $sg1, $sg2, "displacementShader" );
+
+ $isEqual = $isEqual && compareAttributes( $sg1, $sg2, "memberWireframeColor" );
+
+ if ( $isEqual )
+ {
+ mergeShadingGroup( $sg1, $sg2 );
+ }
+
+ return $isEqual;
+}
+
+//===========================================================================
+// mergeMaterial
+//===========================================================================
+// Description: The two Materials have been deemed to be equal.
+// The former adopts the output connections for the latter and
+// the latter is deleted from the scene.
+//
+// Constraints:
+//
+// Parameters: string $sg1: The Material to keep.
+// string $sg2: The Material to discard.
+//
+// Return: (none)
+//
+//===========================================================================
+proc mergeMaterial( string $mat1, string $mat2 )
+{
+ string $c1[] = `listConnections ( $mat1 + ".outColor" )`;
+ string $c2[] = `listConnections ( $mat2 + ".outColor" )`;
+
+ // If no connection, or if connections are already the same, take no action.
+ if ( ( $c1[0] != "" && $c2[0] != "" ) && ( $c1[0] != $c2[0] ) )
+ {
+ // Deprecate and delete $mat2
+ string $cc[] = `listConnections -source false -d true -plugs true ( $mat2 + ".outColor" )`;
+ disconnectAttr ( $mat2 + ".outColor" ) $cc[0];
+
+ connectAttr ( $mat1 + ".outColor" ) $cc[0];
+
+ safeDelete( $mat2 );
+ }
+}
+
+//===========================================================================
+// compareMaterials
+//===========================================================================
+// Description: Compares the connections and attributes for two specified
+// Materials and evaluates if they can be considered
+// equivalent. If equivalent, the two are merged.
+//
+// Constraints: If the two Materials are equal, $mat2 will likely be
+// deleted from the scene and will not exist when this function
+// call returns.
+//
+// Parameters: string $mat1: The first Material.
+// string $mat2: The second Material.
+//
+// Return: (int): TRUE if the two Materials are equal; else FALSE.
+// If TRUE it is likely that $mat2 was deleted.
+//
+//===========================================================================
+proc int compareMaterials( string $mat1, string $mat2 )
+{
+ int $isEqual = true;
+
+ $isEqual = $isEqual && compareConnections( $mat1, $mat2, "color" );
+ $isEqual = $isEqual && compareAttributes( $mat1, $mat2, "color" );
+
+ $isEqual = $isEqual && compareConnections( $mat1, $mat2, "transparency" );
+ $isEqual = $isEqual && compareAttributes( $mat1, $mat2, "transparency" );
+
+ $isEqual = $isEqual && compareConnections( $mat1, $mat2, "ambient" );
+ $isEqual = $isEqual && compareAttributes( $mat1, $mat2, "ambient" );
+
+ $isEqual = $isEqual && compareConnections( $mat1, $mat2, "diffuse" );
+ $isEqual = $isEqual && compareAttributes( $mat1, $mat2, "diffuse" );
+
+ $isEqual = $isEqual && compareConnections( $mat1, $mat2, "emissive" );
+ $isEqual = $isEqual && compareAttributes( $mat1, $mat2, "emissive" );
+
+ $isEqual = $isEqual && compareConnections( $mat1, $mat2, "specular" );
+ $isEqual = $isEqual && compareAttributes( $mat1, $mat2, "specular" );
+
+ $isEqual = $isEqual && compareAttributes( $mat1, $mat2, "shininess" );
+
+ // Pure3D attributes
+ // '.pddiShaderName' will short-circuit the remainder if shader types aren't equal.
+ $isEqual = $isEqual && compareAttributes( $mat1, $mat2, "pddiShaderName" );
+
+ $isEqual = $isEqual && compareAttributes( $mat1, $mat2, "alphaCompare" );
+ $isEqual = $isEqual && compareAttributes( $mat1, $mat2, "alphaTest" );
+ $isEqual = $isEqual && compareAttributes( $mat1, $mat2, "blendMode" );
+ $isEqual = $isEqual && compareAttributes( $mat1, $mat2, "doubleSided" );
+ $isEqual = $isEqual && compareAttributes( $mat1, $mat2, "dynamicallyLit" );
+ $isEqual = $isEqual && compareAttributes( $mat1, $mat2, "filterMode" );
+ $isEqual = $isEqual && compareAttributes( $mat1, $mat2, "isLightMapped" );
+ $isEqual = $isEqual && compareAttributes( $mat1, $mat2, "isLit" );
+ $isEqual = $isEqual && compareAttributes( $mat1, $mat2, "isTranslucent" );
+ $isEqual = $isEqual && compareAttributes( $mat1, $mat2, "K" );
+ $isEqual = $isEqual && compareAttributes( $mat1, $mat2, "L" );
+ $isEqual = $isEqual && compareAttributes( $mat1, $mat2, "mipmapmax" );
+ $isEqual = $isEqual && compareAttributes( $mat1, $mat2, "mipmapmin" );
+ $isEqual = $isEqual && compareAttributes( $mat1, $mat2, "mmsharpness" );
+ $isEqual = $isEqual && compareAttributes( $mat1, $mat2, "prelightMode" );
+ $isEqual = $isEqual && compareAttributes( $mat1, $mat2, "proceduralXRes" );
+ $isEqual = $isEqual && compareAttributes( $mat1, $mat2, "proceduralYRes" );
+ $isEqual = $isEqual && compareAttributes( $mat1, $mat2, "shadeMode" );
+ $isEqual = $isEqual && compareAttributes( $mat1, $mat2, "shininess" );
+ $isEqual = $isEqual && compareAttributes( $mat1, $mat2, "uvMode" );
+ $isEqual = $isEqual && compareAttributes( $mat1, $mat2, "vertexShaderName" );
+
+ if ( $isEqual )
+ {
+ // Navigate to each Material and compare them.
+ string $out1[] = `listConnections ( $mat1 + ".outColor" )`;
+ string $out2[] = `listConnections ( $mat2 + ".outColor" )`;
+
+ mergeMaterial( $mat1, $mat2 );
+
+ compareShadingGroups( $out1[0], $out2[0] );
+ }
+
+ return $isEqual;
+}
+
+//===========================================================================
+// mergeFile
+//===========================================================================
+// Description: The two file textures have been deemed to be equal.
+// The former adopts the output connections for the latter and
+// the latter is deleted from the scene.
+//
+// Constraints:
+//
+// Parameters: string $file1: The file texture to keep.
+// string $file2: The file texture to discard.
+//
+// Return: (none)
+//
+//===========================================================================
+proc mergeFile( string $file1, string $file2 )
+{
+ string $c1[] = `listConnections ( $file1 + ".outColor" )`;
+ string $c2[] = `listConnections ( $file2 + ".outColor" )`;
+
+ // If no connection, or if connections are already the same, take no action.
+ if ( ( $c1[0] != "" && $c2[0] != "" ) && ( $c1[0] != $c2[0] ) )
+ {
+ string $cc[] = `listConnections -source false -d true -plugs true ( $file2 + ".outColor" )`;
+ disconnectAttr ( $file2 + ".outColor" ) $cc[0];
+
+ connectAttr ( $file1 + ".outColor" ) $cc[0];
+
+ safeDelete( $file2 );
+ }
+}
+
+//===========================================================================
+// compareFiles
+//===========================================================================
+// Description: Compares the connections and attributes for two specified
+// file textures and evaluates if they can be considered
+// equivalent. If equivalent, the two are merged.
+//
+// Constraints: If the two file textures are equal, $file2 will likely be
+// deleted from the scene and will not exist when this function
+// call returns.
+//
+// Parameters: string $file1: The first file texture.
+// string $file2: The second file texture.
+//
+// Return: (int): TRUE if the two file textures are equal; else FALSE.
+// If TRUE it is likely that $file2 was deleted.
+//
+//===========================================================================
+global proc int compareFiles( string $file1, string $file2 )
+{
+ int $isEqual = true;
+
+ // Compare place2d attributes
+ $isEqual = $isEqual && compareAttributes( $file1, $file2, "coverage" );
+ $isEqual = $isEqual && compareAttributes( $file1, $file2, "mirror" );
+ $isEqual = $isEqual && compareAttributes( $file1, $file2, "noiseUV" );
+ $isEqual = $isEqual && compareAttributes( $file1, $file2, "offset" );
+ $isEqual = $isEqual && compareAttributes( $file1, $file2, "uvFilterSize" );
+ $isEqual = $isEqual && compareAttributes( $file1, $file2, "repeatUV" );
+ $isEqual = $isEqual && compareAttributes( $file1, $file2, "rotateFrame" );
+ $isEqual = $isEqual && compareAttributes( $file1, $file2, "rotateUV" );
+ $isEqual = $isEqual && compareAttributes( $file1, $file2, "stagger" );
+ $isEqual = $isEqual && compareAttributes( $file1, $file2, "translateFrame" );
+ $isEqual = $isEqual && compareAttributes( $file1, $file2, "wrapU" );
+ $isEqual = $isEqual && compareAttributes( $file1, $file2, "wrapV" );
+
+ if ( $isEqual )
+ {
+ // Navigate to each Material and compare them.
+ string $out1[] = `listConnections ( $file1 + ".outColor" )`;
+ string $out2[] = `listConnections ( $file2 + ".outColor" )`;
+
+ mergeFile( $file1, $file2 );
+
+ if ( $out1[0] != "" && $out2[0] != "" )
+ {
+ $isEqual = compareMaterials( $out1[0], $out2[0] );
+ }
+ }
+
+ return $isEqual;
+}
+
+//===========================================================================
+// getSortedShadingGroups
+//===========================================================================
+// Description: It is only relevant to compare two Shading Groups for merging
+// if they share the same Surface Shader. This returns an array
+// of all Shading Groups sorted by the names of the nodes
+// connected to their .surfaceShader inputs.
+//
+// Constraints:
+//
+// Parameters: (none)
+//
+// Return: (string[]): Array of all Shading Groups, sorted by their
+// '.surfaceShader' inputs.
+//
+//===========================================================================
+proc string[] getSortedShadingGroups()
+{
+ string $allShadingGroups[];
+
+ string $shadingGroups[] = `ls -type "shadingEngine"`;
+
+ for ( $f in $shadingGroups )
+ {
+ string $cc[] = `listConnections -d false -s true ( $f + ".surfaceShader" )`;
+ $allShadingGroups[`size $allShadingGroups`] = ( $cc[0] + "*" + $f );
+ }
+
+ $allShadingGroups = `sort $allShadingGroups`;
+ clear $shadingGroups;
+
+ for ( $f in $allShadingGroups )
+ {
+ string $tokens[];
+ tokenize $f "*" $tokens;
+
+ $shadingGroups[`size $shadingGroups`] = $tokens[1];
+ }
+
+ return $shadingGroups;
+}
+
+//===========================================================================
+// getSortedMaterials
+//===========================================================================
+// Description: It is only relevant to compare two Materials for merging
+// if they share the same Color connection. This returns an
+// array of all Materials sorted by the names of the nodes
+// connected to their .color inputs.
+//
+// Constraints:
+//
+// Parameters: (none)
+//
+// Return: (string[]): Array of all Materials, sorted by their
+// '.color' inputs.
+//
+//===========================================================================
+proc string[] getSortedMaterials()
+{
+ string $allMaterials[];
+
+ string $materials[] = `ls -materials`;
+
+ for ( $f in $materials )
+ {
+ string $cc[] = `listConnections -d false -s true ( $f + ".color" )`;
+ $allMaterials[`size $allMaterials`] = ( $cc[0] + "*" + $f );
+ }
+
+ $allMaterials = `sort $allMaterials`;
+ clear $materials;
+
+ for ( $f in $allMaterials )
+ {
+ string $tokens[];
+ tokenize $f "*" $tokens;
+
+ $materials[`size $materials`] = $tokens[1];
+ }
+
+ return $materials;
+}
+
+//===========================================================================
+// getSortedFileTextures
+//===========================================================================
+// Description: It is only relevant to compare two file textures for merging
+// if they share the same input file. This returns an array
+// of all file textures sorted by the names of their source
+// files, obtained from the '.fileTextureName' attribute.
+//
+// Constraints:
+//
+// Parameters: (none)
+//
+// Return: (string[]): Array of all file textures, sorted by their
+// '.fileTextureName' inputs.
+//
+//===========================================================================
+proc string[] getSortedFileTextures()
+{
+ string $allFiles[];
+
+ string $files[] = `ls -type "file"`;
+
+ for ( $f in $files )
+ {
+ string $ftn = `getAttr ( $f + ".fileTextureName" )`;
+ $allFiles[`size $allFiles`] = ( $ftn + "*" + $f );
+ }
+
+ $allFiles = `sort $allFiles`;
+ clear $files;
+
+ for ( $f in $allFiles )
+ {
+ string $tokens[];
+ tokenize $f "*" $tokens;
+
+ $files[`size $files`] = $tokens[1];
+ }
+
+ return $files;
+}
+
+//===========================================================================
+// optimizeShadingGroups
+//===========================================================================
+// Description: Entry point to optimize Shading Groups.
+//
+// Constraints: Will not attempt to merge Materials that could serve to
+// optimize Shading Groups. Only Shading Groups already sharing
+// a common Material will be merged.
+//
+// Parameters: (none)
+//
+// Return: (none)
+//
+//===========================================================================
+proc optimizeShadingGroups()
+{
+ waitCursor -state on;
+
+ string $sgs[] = getSortedShadingGroups();
+
+ int $startSG = `size $sgs`;
+
+ int $f;
+ for ( $f = 0; $f < `size $sgs` - 1; $f++ )
+ {
+ // Previous optimization may have deleted this node
+ string $sg1 = "";
+ while ( $f < `size $sgs` - 1 )
+ {
+ if ( `objExists $sgs[$f]` )
+ {
+ $sg1 = $sgs[$f];
+ break;
+ }
+
+ $f++;
+ }
+
+ if ( $sg1 == "" ) break;
+
+ string $sg2 = $sgs[$f+1];
+
+ compareShadingGroups( $sg1, $sg2 );
+ }
+
+ $sgs = `ls -type "shadingEngine"`;
+ int $endSG = `size $sgs`;
+
+ print ( "optimizeShadingGroups removed " + ( $startSG- $endSG ) + " shadingGroups.\n" );
+
+ waitCursor -state off;
+}
+
+//===========================================================================
+// optimizeMaterials
+//===========================================================================
+// Description: Entry point to optimize Materials.
+//
+// Constraints: Will not attempt to merge file textures that could serve to
+// optimize Materials. Only Materials already sharing a
+// common file texture node will be merged.
+//
+// Parameters: (none)
+//
+// Return: (none)
+//
+//===========================================================================
+global proc optimizeMaterials()
+{
+ waitCursor -state on;
+
+ string $materials[] = getSortedMaterials();
+ int $startCount = `size $materials`;
+
+ int $f;
+ for ( $f = 0; $f < `size $materials` - 1; $f++ )
+ {
+ // Previous optimization may have deleted this node
+ string $mat1 = "";
+ while ( $f < `size $materials` - 1 )
+ {
+ if ( `objExists $materials[$f]` )
+ {
+ $mat1 = $materials[$f];
+ break;
+ }
+
+ $f++;
+ }
+
+ if ( $mat1 == "" ) break;
+
+ string $mat2 = $materials[$f+1];
+
+ compareMaterials( $mat1, $mat2 );
+ }
+
+ $materials = `ls -materials`;
+ int $endCount = `size $materials`;
+
+ print ( "optimizeMaterials removed " + ( $startCount - $endCount ) + " materials.\n" );
+
+ waitCursor -state off;
+}
+
+//===========================================================================
+// optimizeFileTextures
+//===========================================================================
+// Description: Entry point to optimize file textures.
+//
+// Constraints:
+//
+// Parameters: (none)
+//
+// Return: (none)
+//
+//===========================================================================
+global proc optimizeFileTextures()
+{
+ waitCursor -state on;
+
+ string $files[] = getSortedFileTextures();
+ string $materials[] = `ls -materials`;
+ string $sgs[] = `ls -type "shadingEngine"`;
+
+ int $startFiles = `size $files`;
+ int $startMaterials = `size $materials`;
+ int $startSG = `size $sgs`;
+
+ int $f;
+ for ( $f = 0; $f < `size $files` - 1; $f++ )
+ {
+ // Previous optimization may have deleted this node
+ string $file1 = $files[$f];
+ $file2 = "";
+
+ if ( !`objExists $file1` ) continue;
+
+ int $g = $f+1;
+ while ( $g < `size $files` - 1 )
+ {
+ if ( `objExists $files[$g]` )
+ {
+ $file2 = $files[$g];
+ break;
+ }
+
+ $g++;
+ }
+
+ if ( $file1 != "" && $file2 != "" )
+ {
+ string $ftn1 = `getAttr( $file1 + ".fileTextureName" )`;
+ string $ftn2 = `getAttr( $file2 + ".fileTextureName" )`;
+
+ if ( $ftn1 == $ftn2 )
+ {
+ $isEqual = compareFiles( $file1, $file2 );
+ }
+ }
+ }
+
+ $files = `ls -type "file"`;
+ $materials = `ls -materials`;
+ $sgs = `ls -type "shadingEngine"`;
+
+ int $endFiles = `size $files`;
+ int $endMaterials = `size $materials`;
+ int $endSG = `size $sgs`;
+
+ print ( "optimizeFileTextures removed: " + ( $startFiles - $endFiles ) + " file textures; " + ( $startMaterials - $endMaterials ) + " materials; " + ( $startSG - $endSG ) + " shadingGroups.\n" );
+
+ waitCursor -state off;
+}
+
+//===========================================================================
+// optimizeShaders
+//===========================================================================
+// Description: Sorts file textures by their '.fileTextureName' attributes,
+// and for those whose input file matches compares all input
+// attributes to see if they can be considered equivalent.
+// Equivalent file textures are "merged" so one serves the
+// duties previously served by both.
+//
+// Materials and Shading Groups are evaluated and optimized
+// in similar fashion.
+//
+// Constraints: Note that optimizing file textures implies optimization for
+// the Material connected to the optimized file texture, which
+// consequently optimizes the Shading Groups connected to
+// the optimized Material.
+//
+// It is not uncommon that the optimizeMaterials() and
+// optimizeShadingGroups() calls here will yield no additional
+// results after optimizeFileTextures() has completed its run.
+//
+// Parameters: (none)
+//
+// Return: (none)
+//
+//===========================================================================
+global proc optimizeShaders()
+{
+ optimizeFileTextures();
+ optimizeMaterials();
+ optimizeShadingGroups();
+}
+
+/*
+source optimizeShaders; optimizeShaders;
+*/
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/renameScripts.mel b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/renameScripts.mel
new file mode 100644
index 0000000..88045b8
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/renameScripts.mel
@@ -0,0 +1,313 @@
+// Rename Shape and BV node
+// Alias|Wavefront Script File
+//
+// Creation Date: 2001
+// Author: (Novy) Gurdarshan Dhillon
+//
+//
+//
+// Description:
+// Rename the transform, shape, and BV nodes in a hierarchy
+// to a specified name.
+//
+//
+//
+// Input Arguments:
+// None.
+// Return Values:
+// None.
+// renameShape
+//
+
+global proc renameShape(string $newName)
+{
+ if (`size($newName)`>0)
+ {
+ string $objects[] = `ls -sl`;
+
+ for ($object in $objects)
+ {
+ string $children[];
+ clear ($children);
+ int $count = 1;
+ int $count2 = 1;
+ if(`nodeType $object` == "transform")
+ {
+ $object = `rename $object $newName`;
+ print ("\nTopnode : " + $object);
+ //for each object in list get the sub objects.
+ $children = `listRelatives -ad -pa $object`;
+ }
+ if(`nodeType $object` == "joint")
+ {
+ $children[0]= $object;
+ }
+ for($child in $children)
+ {
+ // check if the subobjects are transform and continue
+ string $postfix = "";
+ if(`nodeType $child` == "transform")
+ {
+ print ("\nTransform : " + $child);
+ $child = `rename $child ($newName + $count)`;
+ string $shapes[] = `listRelatives -s $child`;
+ for ($shape in $shapes)
+ {
+ if(`nodeType $shape` == "mesh")
+ {
+ print ("\nMesh : " + $shape);
+ rename $shape ($newName + $count + "Shape");
+ }
+ }
+ $count++;
+ }
+ // check if the sub objects are joints and continue
+ else if(`nodeType $child` == "joint")
+ {
+ print ("\nTransform : " + $child);
+ $child = `rename $child ($newName + $count + "_BV")`;
+ string $shapes[] = `listRelatives -s $child`;
+ for ($shape in $shapes)
+ {
+ if(`nodeType $shape` == "p3dBoundVolShape")
+ {
+ print ("\nMesh : " + $shape);
+ rename $shape ($newName + $count + "_BV" + "Shape");
+ }
+ }
+ $count++;
+ }
+ }
+ }
+ }
+}
+
+
+// Rename Texture node
+// Alias|Wavefront Script File
+//
+// Creation Date: 20 March. 2001
+// Author: (Novy) Gurdarshan Dhillon
+//
+//
+//
+// Description:
+// Renames the texture node to corrisponde to the
+// image file that it contains. Also outputs the
+// images resolution.
+//
+//
+//
+// Input Arguments:
+// None.
+// Return Values:
+// None.
+// renameTexture
+//
+
+global proc renameTexture()
+{
+ string $files[] = `ls -type "file"`;
+ string $imageName;
+ print ("\nRename Info");
+ for ($file in $files)
+ {
+ print ("\n-------------------------------------");
+ $imageName = `getAttr ($file + ".fileTextureName")`;
+ string $path[];
+ string $token[];
+ tokenize $imageName "/" $path;
+ tokenize $path[(`size $path` -1)] "." $token;
+ $file = `rename $file ($token[0] + "_t")`;
+ string $fileConnections[] = `listConnections ($file + ".outColor")`;
+
+ float $res[] = `getAttr ($file + ".outSize")`;
+ print ("\nFile: " + $imageName + " " + $res[0] + " × " + $res[1]);
+ print ("\nFile Texture Node: " + $file);
+ for ($con in $fileConnections)
+ {
+ string $match1;
+ string $match2;
+ string $nodeType = `nodeType $con`;
+ $match1 = `match "Texture" $nodeType`;
+ $match2 = `match "Shader" $nodeType`;
+ if (`size $match1` > 0)
+ {
+ if(`nodeType $con` == "layeredTexture")
+ {
+ string $layeredShaderColor1Con[] = `listConnections ($con + ".inputs[0].color")`;
+ if(`nodeType $layeredShaderColor1Con[0]` == "file")
+ {
+ string $image = `getAttr ($layeredShaderColor1Con[0] + ".fileTextureName")`;
+ string $path[];
+ string $token[];
+ int $size = `tokenize $image "/" $path`;
+ tokenize $path[$size -1] "." $token;
+ $con = `rename $con ($token[0] + "_layered")`;
+ print ("\nLayered Texture Node: " + $con);
+ }
+ }
+ }
+ else if (`size $match2` > 0)
+ {
+ string $shadingEngines[];
+ string $token[];
+ if(`nodeType $con` == "pure3dLayeredShader")
+ {
+ string $layeredShaderColor1Con[] = `listConnections ($con + ".bottomtex")`;
+ if(`nodeType $layeredShaderColor1Con[0]` == "file")
+ {
+ string $image = `getAttr ($layeredShaderColor1Con[0] + ".fileTextureName")`;
+ string $path[];
+ int $size = `tokenize $image "/" $path`;
+ tokenize $path[$size -1] "." $token;
+ $con = `rename $con ($token[0] + "_m")`;
+ $shadingEngines = `listConnections ($con + ".outColor")`;
+ print ("\nMaterial Node: " + $con);
+ }
+ }
+ else
+ {
+ string $layeredShaderColor1Con[] = `listConnections ($con + ".color")`;
+ if(`nodeType $layeredShaderColor1Con[0]` == "file")
+ {
+ string $image = `getAttr ($layeredShaderColor1Con[0] + ".fileTextureName")`;
+ string $path[];
+ int $size = `tokenize $image "/" $path`;
+ tokenize $path[$size -1] "." $token;
+ $con = `rename $con ($token[0] + "_m")`;
+ $shadingEngines = `listConnections ($con + ".outColor")`;
+ print ("\nMaterial Node: " + $con);
+ }
+ }
+ for ($se in $shadingEngines)
+ {
+ $se = `rename $se ($token[0] + "_shg")`;
+ print ("\nShading Engine: " + $se);
+ }
+ }
+ }
+ }
+}
+
+
+global proc fileRes()
+{
+ string $textures[] = `ls -type "file"`;
+ for($texture in $textures)
+ {
+ string $attr = $texture + ".fileTextureName";
+ string $file = `getAttr $attr`;
+ string $attr = $texture + ".outSize";
+ float $res[] = `getAttr $attr`;
+ print ("\n" + $file + " " + $res[0] + " × " + $res[1]);
+ }
+}
+
+global proc removeShapefromNode()
+{
+ string $transforms[] = `ls -sl -tr -l`;
+ if(size($transforms))
+ {
+ for($transform in $transforms)
+ {
+ string $relatives[] = `listRelatives -ad -f $transform`;
+ if (size($relatives))
+ {
+ for ($child in $relatives)
+ {
+ if(`nodeType($child)` == "mesh")
+ {
+ string $path[];
+ int $num = `tokenize $child "|" $path`;
+ rename $child $path[$num-2];
+ }
+ }
+ }
+ else
+ {
+ error("Empty Transform Node!");
+
+ }
+ }
+ }
+ else
+ {error ("Please select a transform node.");}
+}
+
+global proc renameTextureOld()
+{
+ string $textures[] = `ls -type "file" -type "ramp"`;
+ for($texture in $textures)
+ {
+ string $attr;
+ string $image[];
+ string $file;
+ int $num;
+ int $size;
+ string $name;
+ string $fileNode;
+ if (`nodeType $texture` == "file")
+ {
+ $attr = $texture + ".fileTextureName";
+ $file = `getAttr $attr`;
+
+ $num = `tokenize $file "/" $image`;
+ $num = `tokenize $image[$num-1] "." $image`;
+ $attr = $texture + ".outSize";
+ float $res[] = `getAttr $attr`;
+ print ("\nFile: " + $file + " " + $res[0] + " × " + $res[1]);
+ $size = size($image[0]);
+ $name = `substring $image[0] 1 ($size)`;
+ $fileNode = `rename $texture ($name + "_t")`;
+ print ("\nFileNode: " + $fileNode);
+ }
+ else if(`nodeType $texture` == "ramp")
+ {
+ print ("ramp " + $texture);
+ $image[0] = $texture;
+ $fileNode = $texture;
+ }
+ $attr = $fileNode + ".outColor";
+ string $shaders[] = `listConnections -d 1 -s 0 $attr`;
+ // string $shader = $shaders[(size($shaders)-1)];
+ for ($shader in $shaders)
+ {
+ if ($shader != "lambert1" || $shader != "particleCloud1")
+ {
+ string $colorCon[];
+ if (`nodeType $shader` != "layeredTexture")
+ {
+ $colorCon = `listConnections ($shader + ".color")`;
+ //if (size($colorCon[0]) > 0)
+ {
+ $name = $image[0] + "_m";
+ }
+ }
+ else
+ {
+ $colorCon = `listConnections ($shader + ".inputs[0].color")`;
+ if (size($colorCon[0]) > 0)
+ {
+ $name = $image[0] + "_layered";
+ }
+ }
+
+ string $shadeNode = `rename $shader ($name)`;
+ print ("\nShading Node: " + $shadeNode);
+ $attr = $shadeNode + ".outColor";
+ string $engines[] = `listConnections -d 1 -s 0 $attr`;
+ if (size($engines))
+ {
+ for ($engine in $engines)
+ {
+ $name = $image[0] + "_shg";
+ string $engineNode = `rename $engine ($name)`;
+ print ("\nShading Engine: " + $engineNode);
+ }
+ }
+ }
+ }
+ print ("\n----------------------------------------\n");
+ }
+}
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/renameTexture.mel b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/renameTexture.mel
new file mode 100644
index 0000000..4cf0db4
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/renameTexture.mel
@@ -0,0 +1,94 @@
+// renameTexture.mel
+// Rename Texture node
+// Alias|Wavefront Script File
+//
+// Creation Date: 20 March. 2001
+// Author: (Novy) Gurdarshan Dhillon
+//
+//
+//
+// Description:
+// Renames the texture node to corrisponde to the
+// image file that it contains. Also outputs the
+// images resolution.
+//
+//
+//
+// Input Arguments:
+// None.
+// Return Values:
+// None.
+// renameTexture
+//
+
+
+global proc renameTexture()
+{
+ string $textures[] = `ls -type "file" -type "ramp"`;
+ for($texture in $textures)
+ {
+ string $attr;
+ string $image[];
+ string $file;
+ int $num;
+ int $size;
+ string $name;
+ string $fileNode;
+ if (`nodeType $texture` == "file")
+ {
+ $attr = $texture + ".fileTextureName";
+ $file = `getAttr $attr`;
+
+ $num = `tokenize $file "/" $image`;
+ $num = `tokenize $image[$num-1] "." $image`;
+ $attr = $texture + ".outSize";
+ float $res[] = `getAttr $attr`;
+ print ("\nFile: " + $file + " " + $res[0] + " × " + $res[1]);
+ $size = size($image[0]);
+ $name = `substring $image[0] 1 ($size)`;
+ $fileNode = `rename $texture ($name + "_t")`;
+ print ("\nFileNode: " + $fileNode);
+ }
+ else if(`nodeType $texture` == "ramp")
+ {
+ print ("ramp " + $texture);
+ $image[0] = $texture;
+ $fileNode = $texture;
+ }
+ $attr = $fileNode + ".outColor";
+ string $shaders[] = `listConnections -d 1 -s 0 -p 1 $attr`;
+ // string $shader = $shaders[(size($shaders)-1)];
+ for ($shader in $shaders)
+ {
+ string $info[]; tokenize $shader "." $info;
+ if($info[1] == "color")
+ {
+ $name = $image[0] + "_m";
+ string $shadeNode = `rename $info[0] ($name)`;
+ print ("\nShading Node: " + $shadeNode);
+ $attr = $shadeNode + ".outColor";
+ string $engines[] = `listConnections -d 1 -s 0 $attr`;
+ for ($engine in $engines)
+ {
+ $name = $image[0] + "_shg";
+ string $engineNode = `rename $engine ($name)`;
+ print ("\nShading Engine: " + $engineNode);
+ }
+ }
+ }
+ print ("\n----------------------------------------\n");
+ }
+}
+
+global proc fileRes()
+{
+ string $textures[] = `ls -type "file"`;
+ for($texture in $textures)
+ {
+ string $attr = $texture + ".fileTextureName";
+ string $file = `getAttr $attr`;
+ string $attr = $texture + ".outSize";
+ float $res[] = `getAttr $attr`;
+ print ("\n" + $file + " " + $res[0] + " × " + $res[1]);
+ }
+} \ No newline at end of file
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/replaceSimpleShaderWithLambert.mel b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/replaceSimpleShaderWithLambert.mel
new file mode 100644
index 0000000..7f56139
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/replaceSimpleShaderWithLambert.mel
@@ -0,0 +1,152 @@
+//===========================================================================
+// Copyright ©2002 Radical Entertainment Ltd. All rights reserved.
+//
+// Created: 11 April, 2002
+//
+// Component: replaceSimpleShaderWithLambert.mel
+//
+// Description: Replaces all pure3dSimpleShaders with Maya's lambert.
+//
+// Constraints: Attributes that map 1:1 are restored; anything else isn't.
+//
+// Creator: Bryan Ewert
+//
+//===========================================================================
+
+proc string rootNode( string $object )
+{
+ string $buffer[];
+ tokenize $object "." $buffer;
+ return $buffer[0];
+}
+
+//===========================================================================
+// arrayMatch
+//===========================================================================
+// Description: This is copied directly from Maya's "replaceNode.mel"
+//
+//===========================================================================
+proc int arrayMatch( string $array[], string $match )
+{
+ for ($item in $array)
+ if ($item == $match)
+ return true;
+
+ return false;
+}
+
+//===========================================================================
+// myReplaceNode
+//===========================================================================
+// Description: This is mostly copied directly from Maya's "replaceNode.mel"
+//
+// As is usual with Maya scripts, it spewed unnecessary warnings
+// when connections were automatically disconnected or
+// reconnected, and I just don't like Script Editor spew when
+// nothing is actually wrong.
+//
+// All that I changed was to replace the catch() wrappers with
+// less verbose isConnected() wrappers.
+//
+//===========================================================================
+proc myReplaceNode( string $originalNode, string $replaceNode )
+{
+ // Copy the scalar values
+
+ string $originalAttrs[] =
+ `listAttr -scalar -multi -read -visible $originalNode`;
+
+ string $replaceAttrs[] =
+ `listAttr -scalar -multi -write -visible $replaceNode`;
+
+ for ($attr in $originalAttrs) {
+ if (arrayMatch($replaceAttrs, $attr)) {
+ float $value = `getAttr ($originalNode+"."+$attr)`;
+ catch(`setAttr ($replaceNode+"."+$attr) $value`);
+ }
+ }
+
+ string $connections[];
+
+ // Process the source connections
+
+ $connections = `listConnections -source true -destination false
+ -connections true -plugs true $originalNode`;
+
+ for ($i = 0; $i < size($connections); $i += 2) {
+ string $originalPlug = $connections[$i];
+ string $srcPlug = $connections[$i+1];
+
+ string $replacePlug =
+ substitute($originalNode, $originalPlug, $replaceNode);
+
+ catch(`connectAttr $srcPlug $replacePlug`);
+ }
+
+ // Process the destination connections
+
+ $connections = `listConnections -source false -destination true
+ -connections true -plugs true $originalNode`;
+
+ for ($i = 0; $i < size($connections); $i += 2) {
+ string $originalPlug = $connections[$i];
+ string $dstPlug = $connections[$i+1];
+
+ string $replacePlug =
+ substitute($originalNode, $originalPlug, $replaceNode);
+
+ // First, break connections between original and dstPlug.
+ // Maya's 'replaceNode.mel' just wrapped this in a catch(),
+ // which spewed warnings if plug automatically disconnected
+ // due to a previous disconnect.
+ if ( `isConnected $originalPlug $dstPlug` )
+ {
+ disconnectAttr $originalPlug $dstPlug;
+ }
+
+ // Maya's 'replaceNode.mel' just wrapped this in a catch(),
+ // which spewed warnings if plug was automatically connected.
+ if ( !`isConnected $replacePlug $dstPlug` )
+ {
+ connectAttr $replacePlug $dstPlug;
+ }
+ }
+}
+
+//===========================================================================
+// replaceSimpleShaderWithLambert
+//===========================================================================
+// Description: Replaces all pure3dSimpleShaders with Maya's lambert.
+//
+// Constraints: Attributes that map 1:1 are restored; anything else isn't.
+//
+// Parameters: (none)
+//
+// Return: (none)
+//
+//===========================================================================
+global proc replaceSimpleShaderWithLambert()
+{
+ string $ss[] = `ls -type "pure3dSimpleShader"`;
+
+ for ( $shaderNode in $ss )
+ {
+ string $alpha[] = `listConnections ( $shaderNode + ".transparency" )`;
+
+ // This would be the desired Material type
+ string $replaceType = "lambert";
+
+ string $replaceWith = `createNode $replaceType`;
+
+ myReplaceNode $shaderNode $replaceWith;
+
+ delete $shaderNode;
+
+ // Rename the new node to match the original.
+ rename $replaceWith $shaderNode;
+ }
+}
+
+/*
+source replaceSimpleShaderWithLambert; replaceSimpleShaderWithLambert;
+*/
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/replaceTex.mel b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/replaceTex.mel
new file mode 100644
index 0000000..19369cc
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/replaceTex.mel
@@ -0,0 +1,38 @@
+
+/*
+ |
+ | $Source: replaceTex.mel $
+ |
+ | $Author: jschleifer $
+ | $Revision: /main/1 $
+ | $Date: 1997/11/06 10:46:33 $
+ |
+ | Original Author:
+ | Jason Schleifer
+ |
+ | Description:
+ | Replaces strings in texture filenames. Works really well if you
+ | need to fix paths.
+ |
+ | Usage:
+ | replaceTex <old string> <new string>
+ |
+ | ex:
+ |
+ | replaceTex "/this/is/an/explicit/path" "";
+ |
+*/
+
+global proc replaceTex (string $old, string $new)
+{
+ for ($item in `ls -type file`)
+ {
+ string $name = `getAttr ($item + ".fileTextureName")`;
+ $name = `substitute $old $name $new`;
+ print ("setAttr -type \"string\" " + $item + ".fileTextureName \"" + $name + "\";\n");
+ $cmd = ("setAttr -type \"string\" " + $item + ".fileTextureName \"" + $name + "\";\n");
+
+ eval $cmd;
+ }
+
+}
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/rndPoints.mel b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/rndPoints.mel
new file mode 100644
index 0000000..7420382
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/rndPoints.mel
@@ -0,0 +1,578 @@
+/* rndPoints V1.6 - Maya2.0
+
+This script may be freely distributed. Modify at your own risk.
+
+Author: Dirk Bialluch (DirkBi@Software2000.de)
+
+Creation date: 21.12.98
+Last update: 15.10.00
+
+Description:
+ Please refer to integrated help window.
+
+History:
+ V1.1
+ NEW
+ -added lattice points and polygon vertices
+ V1.2
+ NEW
+ -set world space axes
+ V1.3
+ NEW
+ -store UI values
+ -transform mode added (world/object space)
+ -set intensity range
+ -use seed value checkbox added
+ -show min/max value
+ V1.4
+ ENHANCED
+ -store UI values as soon as UI element changes
+ NEW
+ -randomize along normal, u & v tangent
+ V1.5
+ FIXED
+ -"Use Seed Value" flag will now be recognized
+ NEW
+ -added threshold value for point randomization
+ V1.6
+ CHANGED
+ -UI point count display removed, due to performance issues
+ ENHANCED
+ -poly vertices can now be randomized along the uv direction
+ NEW
+ -major UI update
+ -reset UI
+ -help window
+*/
+
+//
+// Create UI **********************************************************************************
+//
+
+global proc rndPoints ()
+{
+ // set select tool
+ global string $gSelect;
+ setToolTo $gSelect;
+
+ int $uiLabelWidth = 140;
+ int $uiInputWidth = 240;
+ int $uiWidth = $uiLabelWidth + $uiInputWidth + 40;
+
+ if (`window -exists rp_ui` == true)
+ deleteUI rp_ui;
+
+ window
+ -maximizeButton 0
+ -resizeToFitChildren 0
+ -title "Randomize Points V1.6"
+ -iconName "Randomize Points"
+ -menuBar true
+ -menuBarVisible true
+ rp_ui;
+ menu
+ -label "Edit"
+ -tearOff false;
+ menuItem
+ -label "Reset Settings"
+ -c "rp_storeRecallUI reset; rndPoints";
+ menu
+ -label "Help"
+ -tearOff 0;
+ menuItem
+ -label "Help with Randomize Points tool"
+ -c "rp_help 1";
+ menuItem
+ -divider true;
+ menuItem
+ -label "Script Information"
+ -c "rp_help 2";
+
+ string $rp_form = `formLayout -numberOfDivisions 100`;
+ string $rp_scroll = `scrollLayout -hst 16 -vst 16 -childResizable true -minChildWidth $uiWidth`;
+ columnLayout -adjustableColumn true -rowSpacing 5;
+ frameLayout
+ -label "Settings"
+ -labelAlign "center"
+ -cll true
+ -lw $uiWidth
+ -mh 3
+ -borderStyle "etchedIn"
+ -cc "rp_adjustUI nop"
+ -ec "rp_adjustUI nop"
+ -bv true
+ rp_sFrame;
+ columnLayout -adjustableColumn true;
+ rowLayout
+ -numberOfColumns 3
+ -cat 1 "right" 5
+ -columnWidth 1 $uiLabelWidth
+ -columnWidth 2 $uiInputWidth;
+ text -l "Intensity";
+ floatSliderGrp
+ -field true
+ -precision 4
+ -value .1
+ -minValue 0
+ -maxValue 1
+ -fieldMinValue 0
+ -fieldMaxValue 10000
+ -sliderStep .1
+ -cc "rp_adjustUI nop"
+ -dc "rp_adjustUI nop"
+ rp_intensity;
+ text -l "WS";
+ setParent ..;
+ rowLayout
+ -numberOfColumns 3
+ -cat 1 "right" 5
+ -columnWidth 1 $uiLabelWidth
+ -columnWidth 2 $uiInputWidth;
+ text -l "Intensity Range";
+ floatSliderGrp
+ -field true
+ -precision 4
+ -value 0
+ -minValue -100
+ -maxValue 100
+ -sliderStep 5
+ -cc "rp_adjustUI nop"
+ -dc "rp_adjustUI nop"
+ rp_intensityRange;
+ text -l "-/+ %";
+ setParent ..;
+ rowLayout
+ -numberOfColumns 4
+ -cat 1 "right" 5
+ -columnWidth 1 $uiLabelWidth
+ -columnWidth 2 ( $uiInputWidth / 2 )
+ -columnWidth 3 ( $uiInputWidth / 2 );
+ text -l "Min/Max Value";
+ floatField
+ -w ( $uiInputWidth / 2 )
+ -precision 4
+ -editable false
+ rp_min;
+ floatField
+ -w ( $uiInputWidth / 2 )
+ -precision 4
+ -editable false
+ rp_max;
+ text -label "Info";
+ setParent ..;
+
+ separator -h 10;
+
+ rowLayout
+ -numberOfColumns 3
+ -cat 1 "right" 5
+ -columnWidth 1 $uiLabelWidth
+ -columnWidth 2 $uiInputWidth;
+ text -l "Threshold";
+ floatSliderGrp
+ -field true
+ -precision 4
+ -value 0
+ -minValue 0
+ -maxValue 1
+ -sliderStep .1
+ -cc "rp_adjustUI nop"
+ -dc "rp_adjustUI nop"
+ rp_threshold;
+ text -l "0-1";
+ setParent ..;
+
+ separator -h 10;
+
+ rowLayout
+ -numberOfColumns 2
+ -cat 1 "right" 5
+ -columnWidth 1 $uiLabelWidth
+ -columnWidth 2 $uiInputWidth;
+ text -label "Use Seed Value";
+ checkBox
+ -label ""
+ -value true
+ -cc "rp_adjustUI nop"
+ rp_useSeed;
+ setParent ..;
+ rowLayout
+ -numberOfColumns 2
+ -cat 1 "right" 5
+ -columnWidth 1 $uiLabelWidth
+ -columnWidth 2 $uiInputWidth;
+ text -l "Seed Value";
+ intSliderGrp
+ -field true
+ -value 1234
+ -minValue 0
+ -maxValue 99999
+ -cc "rp_adjustUI nop"
+ rp_seed;
+ setParent ..;
+
+ separator -h 10;
+
+ rowLayout
+ -numberOfColumns 2
+ -cat 1 "right" 5
+ -columnWidth 1 $uiLabelWidth
+ -columnWidth 2 $uiInputWidth;
+ text
+ -label "Transform Mode";
+ radioButtonGrp
+ -numberOfRadioButtons 3
+ -cw 1 100
+ -cw 2 105
+ -labelArray3 "World Space" "Object Space" "Distance"
+ -select 1
+ -cc "rp_adjustUI nop"
+ rp_transMode;
+ setParent ..;
+
+ separator -h 10;
+
+ rowLayout
+ -numberOfColumns 4
+ -cat 1 "right" 5
+ -columnWidth 1 $uiLabelWidth
+ -columnWidth 2 50
+ -columnWidth 3 50;
+ text -label "Enable Axes";
+ checkBox
+ -label "X"
+ -value true
+ -cc "rp_adjustUI nop"
+ rp_x;
+ checkBox
+ -label "Y"
+ -value true
+ -cc "rp_adjustUI nop"
+ rp_y;
+ checkBox
+ -label "Z"
+ -value true
+ -cc "rp_adjustUI nop"
+ rp_z;
+ setParent ..;
+ setParent ..;
+ setParent ..;
+ setParent ..;
+ setParent ..;
+
+ button
+ -label "Randomize Points"
+ -command "rp_main"
+ rp_execButton;
+
+ button
+ -label "Close"
+ -command "deleteUI rp_ui"
+ rp_closeButton;
+
+ // set form layouts
+ formLayout -edit
+ -attachForm $rp_scroll "top" 2
+ -attachForm $rp_scroll "left" 2
+ -attachControl $rp_scroll "bottom" 2 rp_execButton
+ -attachForm $rp_scroll "right" 2
+
+ -attachNone rp_execButton "top"
+ -attachForm rp_execButton "left" 2
+ -attachForm rp_execButton "bottom" 2
+ -attachPosition rp_execButton "right" 2 50
+
+ -attachNone rp_closeButton "top"
+ -attachPosition rp_closeButton "left" 2 50
+ -attachForm rp_closeButton "bottom" 2
+ -attachForm rp_closeButton "right" 2
+ $rp_form;
+
+ rp_storeRecallUI recall;
+
+ // check UI settings after restoring values
+ rp_adjustUI nop;
+
+ showWindow rp_ui;
+}
+
+global proc rp_storeRecallUI ( string $mode )
+{
+ string $floatFieldList[] = {
+ };
+
+ string $intFieldList[] = {
+ };
+
+ string $optionMenuList[] = {
+ };
+
+ string $floatSliderGrpList[] = {
+ "rp_intensity",
+ "rp_intensityRange",
+ "rp_threshold"
+ };
+
+ string $intSliderGrpList[] = {
+ "rp_seed"
+ };
+
+ string $checkBoxList[] = {
+ "rp_useSeed",
+ "rp_x",
+ "rp_y",
+ "rp_z"
+ };
+
+ string $radioButtonGrpList[] = {
+ "rp_transMode"
+ };
+
+ string $frameLayoutList[] = {
+ "rp_sFrame"
+ };
+
+ int $cnt;
+
+ if ( $mode == "store" )
+ {
+ for ( $cnt = 0; $cnt < size( $floatFieldList ); $cnt++ )
+ optionVar -floatValue $floatFieldList[$cnt] `floatField -q -value $floatFieldList[$cnt]`;
+
+ for ( $cnt = 0; $cnt < size( $intFieldList ); $cnt++ )
+ optionVar -intValue $intFieldList[$cnt] `intField -q -value $intFieldList[$cnt]`;
+
+ for ( $cnt = 0; $cnt < size( $floatSliderGrpList ); $cnt++ )
+ optionVar -floatValue $floatSliderGrpList[$cnt] `floatSliderGrp -q -value $floatSliderGrpList[$cnt]`;
+
+ for ( $cnt = 0; $cnt < size( $intSliderGrpList ); $cnt++ )
+ optionVar -intValue $intSliderGrpList[$cnt] `intSliderGrp -q -value $intSliderGrpList[$cnt]`;
+
+ for ( $cnt = 0; $cnt < size( $checkBoxList ); $cnt++ )
+ optionVar -intValue $checkBoxList[$cnt] `checkBox -q -value $checkBoxList[$cnt]`;
+
+ for ( $cnt = 0; $cnt < size( $optionMenuList ); $cnt++ )
+ optionVar -intValue $optionMenuList[$cnt] `optionMenu -q -select $optionMenuList[$cnt]`;
+
+ for ( $cnt = 0; $cnt < size( $radioButtonGrpList ); $cnt++ )
+ optionVar -intValue $radioButtonGrpList[$cnt] `radioButtonGrp -q -select $radioButtonGrpList[$cnt]`;
+
+ for ( $cnt = 0; $cnt < size( $frameLayoutList ); $cnt++ )
+ optionVar -intValue $frameLayoutList[$cnt] `frameLayout -q -collapse $frameLayoutList[$cnt]`;
+ }
+
+ if ( $mode == "recall" )
+ {
+ for ( $cnt = 0; $cnt < size( $floatFieldList ); $cnt++ )
+ if ( `optionVar -exists $floatFieldList[$cnt]` )
+ floatField -e -value `optionVar -q $floatFieldList[$cnt]` $floatFieldList[$cnt];
+
+ for ( $cnt = 0; $cnt < size( $intFieldList ); $cnt++ )
+ if ( `optionVar -exists $intFieldList[$cnt]` )
+ intField -e -value `optionVar -q $intFieldList[$cnt]` $intFieldList[$cnt];
+
+ for ( $cnt = 0; $cnt < size( $floatSliderGrpList ); $cnt++ )
+ if ( `optionVar -exists $floatSliderGrpList[$cnt]` )
+ floatSliderGrp -e -value `optionVar -q $floatSliderGrpList[$cnt]` $floatSliderGrpList[$cnt];
+
+ for ( $cnt = 0; $cnt < size( $intSliderGrpList ); $cnt++ )
+ if ( `optionVar -exists $intSliderGrpList[$cnt]` )
+ intSliderGrp -e -value `optionVar -q $intSliderGrpList[$cnt]` $intSliderGrpList[$cnt];
+
+ for ( $cnt = 0; $cnt < size( $checkBoxList ); $cnt++ )
+ if ( `optionVar -exists $checkBoxList[$cnt]` )
+ checkBox -e -value `optionVar -q $checkBoxList[$cnt]` $checkBoxList[$cnt];
+
+ for ( $cnt = 0; $cnt < size( $optionMenuList ); $cnt++ )
+ if ( `optionVar -exists $optionMenuList[$cnt]` )
+ optionMenu -e -select `optionVar -q $optionMenuList[$cnt]` $optionMenuList[$cnt];
+
+ for ( $cnt = 0; $cnt < size( $radioButtonGrpList ); $cnt++ )
+ if ( `optionVar -exists $radioButtonGrpList[$cnt]` )
+ radioButtonGrp -e -select `optionVar -q $radioButtonGrpList[$cnt]` $radioButtonGrpList[$cnt];
+
+ for ( $cnt = 0; $cnt < size( $frameLayoutList ); $cnt++ )
+ if ( `optionVar -exists $frameLayoutList[$cnt]` )
+ frameLayout -e -collapse `optionVar -q $frameLayoutList[$cnt]` $frameLayoutList[$cnt];
+ }
+
+ if ( $mode == "reset" )
+ {
+ for ( $cnt = 0; $cnt < size( $floatFieldList ); $cnt++ )
+ optionVar -remove $floatFieldList[$cnt];
+
+ for ( $cnt = 0; $cnt < size( $intFieldList ); $cnt++ )
+ optionVar -remove $intFieldList[$cnt];
+
+ for ( $cnt = 0; $cnt < size( $floatSliderGrpList ); $cnt++ )
+ optionVar -remove $floatSliderGrpList[$cnt];
+
+ for ( $cnt = 0; $cnt < size( $intSliderGrpList ); $cnt++ )
+ optionVar -remove $intSliderGrpList[$cnt];
+
+ for ( $cnt = 0; $cnt < size( $checkBoxList ); $cnt++ )
+ optionVar -remove $checkBoxList[$cnt];
+
+ for ( $cnt = 0; $cnt < size( $optionMenuList ); $cnt++ )
+ optionVar -remove $optionMenuList[$cnt];
+
+ for ( $cnt = 0; $cnt < size( $radioButtonGrpList ); $cnt++ )
+ optionVar -remove $radioButtonGrpList[$cnt];
+
+ for ( $cnt = 0; $cnt < size( $frameLayoutList ); $cnt++ )
+ optionVar -remove $frameLayoutList[$cnt];
+ }
+}
+
+//
+// Adjust UI settings
+//
+
+global proc rp_adjustUI ( string $function )
+{
+ if ( `checkBox -q -v rp_useSeed` )
+ intSliderGrp -e -enable true rp_seed;
+ else
+ intSliderGrp -e -enable false rp_seed;
+
+ if ( ( `checkBox -q -v rp_x` || `checkBox -q -v rp_y` || `checkBox -q -v rp_z` ) && `floatSliderGrp -q -value rp_intensity` )
+ button -e -enable true rp_execButton;
+ else
+ button -e -enable false rp_execButton;
+
+ if ( `radioButtonGrp -q -select rp_transMode` == 1 )
+ floatSliderGrp -e -extraLabel "WS" rp_intensity;
+ else
+ floatSliderGrp -e -extraLabel "OS" rp_intensity;
+
+ if ( `radioButtonGrp -q -select rp_transMode` == 3 )
+ {
+ checkBox -e -label "U" rp_x;
+ checkBox -e -label "V" rp_y;
+ checkBox -e -label "N" rp_z;
+ }
+ else
+ {
+ checkBox -e -label "X" rp_x;
+ checkBox -e -label "Y" rp_y;
+ checkBox -e -label "Z" rp_z;
+ }
+
+ // calculate min/max displacement value
+ float $intensity = `floatSliderGrp -q -value rp_intensity`;
+ float $intensityRange = `floatSliderGrp -q -value rp_intensityRange`;
+
+ float $min = -($intensity / 2) + ($intensity * $intensityRange / 200);
+ float $max = $intensity / 2 + ($intensity * $intensityRange / 200);
+
+ floatField -e -value $min rp_min;
+ floatField -e -value $max rp_max;
+
+ rp_storeRecallUI store;
+}
+
+
+//
+// Main function
+//
+
+global proc rp_main ()
+{
+ // get settings from UI
+ float $min = `floatField -q -value rp_min`;
+ float $max = `floatField -q -value rp_max`;
+ int $seed = `intSliderGrp -q -value rp_seed`;
+ int $useSeed = `checkBox -q -v rp_useSeed`;
+ int $enX = `checkBox -q -v rp_x`;
+ int $enY = `checkBox -q -v rp_y`;
+ int $enZ = `checkBox -q -v rp_z`;
+ int $transMode = `radioButtonGrp -q -select rp_transMode`;
+ float $threshold = `floatSliderGrp -q -value rp_threshold`;
+
+ // init random function for repeatable results
+ if ( $useSeed )
+ seed $seed;
+
+ string $objList[];
+
+ // get selected points
+ if ( $transMode != 3 )
+ // filter cv, poly vertices and lattice points
+ $objList = `filterExpand -ex true -sm 28 -sm 31 -sm 46`;
+ else
+ // filter cv and poly vertices
+ $objList = `filterExpand -ex true -sm 28 -sm 31`;
+
+ int $listSize = size($objList);
+
+ waitCursor -state on;
+
+ // transform CV
+ float $xmin, $ymin, $zmin, $xmax, $ymax, $zmax;
+ int $count;
+ string $u = "";
+ string $v = "";
+ string $n = "";
+
+ int $threshArray[] = {};
+
+ for ($count = 0; $count < $listSize; $count++)
+ {
+ float $threshRnd = `rand 0 1`;
+
+ if ( $threshRnd >= $threshold )
+ {
+ $threshArray[$count] = 1;
+
+ $xmin = $ymin = $zmin = $xmax = $ymax = $zmax = 0;
+ if ($enX)
+ {
+ $xmin = $min;
+ $xmax = $max;
+ }
+ if ($enY)
+ {
+ $ymin = $min;
+ $ymax = $max;
+ }
+ if ($enZ)
+ {
+ $zmin = $min;
+ $zmax = $max;
+ }
+
+ if ( $transMode == 1 )
+ move -r -ws `rand $xmin $xmax` `rand $ymin $ymax` `rand $zmin $zmax` $objList[$count];
+ else if ( $transMode == 2 )
+ move -r -os `rand $xmin $xmax` `rand $ymin $ymax` `rand $zmin $zmax` $objList[$count];
+ else
+ {
+ $u += "-u " + ( `rand $xmin $xmax` ) + " ";
+ $v += "-v " + ( `rand $ymin $ymax` ) + " ";
+ $n += "-n " + ( `rand $zmin $zmax` ) + " ";
+ }
+ }
+ }
+
+ if ( $transMode == 3)
+ {
+ string $pointList = "";
+
+ for ( $cnt = 0; $cnt < size ( $threshArray ); $cnt++ )
+ {
+ if ( $threshArray[$cnt] )
+ $pointList += ( $objList[$cnt] + " " );
+ }
+
+ if ( size ( $pointList ) )
+ {
+ eval ( "moveVertexAlongDirection " + $n + $pointList );
+ eval ( "moveVertexAlongDirection " + $u + $pointList );
+ eval ( "moveVertexAlongDirection " + $v + $pointList );
+ }
+ }
+
+ waitCursor -state off;
+}
+
+// end of script
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/rndPoints.xpm b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/rndPoints.xpm
new file mode 100644
index 0000000..c8b61b6
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/rndPoints.xpm
@@ -0,0 +1,828 @@
+/* XPM */
+static char *RNDPTS_xpm[]={
+"32 32 793 2",
+" c #22651C",
+" 0 c #508427",
+" 1 c #5A8E2B",
+" 2 c #598D2C",
+" 3 c #5B902E",
+" 4 c #5A8F2F",
+" 5 c #5A8E30",
+" 6 c #52882B",
+" 7 c #2E7722",
+" 8 c #226F20",
+" 9 c #226E20",
+" a c #58882F",
+" b c #5A852B",
+" c c #4F7B25",
+" d c #567D26",
+" e c #557B25",
+" f c #527824",
+" g c #507522",
+" h c #37681C",
+" i c #1C5C1B",
+" j c #1C5A1A",
+" k c #366921",
+" l c #4E6E1E",
+" m c #4D6C1D",
+" n c #4C6B1C",
+" o c #4B6A1B",
+" p c #4A691A",
+" q c #49671A",
+" r c #426418",
+" s c #205617",
+" t c #195317",
+" u c #185217",
+" v c #41751D",
+" w c #F3CB55",
+" x c #FED863",
+" y c #FFE36E",
+" z c #FFF581",
+" A c #FFFE8E",
+" B c #FFFF9B",
+" C c #FFFF9C",
+" D c #E5E37C",
+" E c #64892B",
+" F c #20691F",
+" G c #D7CC5B",
+" H c #FFE575",
+" I c #F9D365",
+" J c #F0CA5D",
+" K c #E3BD51",
+" L c #D7B347",
+" M c #D1AD42",
+" N c #C6A439",
+" O c #878423",
+" P c #1F5919",
+" Q c #9BAD4F",
+" R c #BA9C39",
+" S c #AF8E29",
+" T c #AB8B27",
+" U c #A78824",
+" V c #A38522",
+" W c #A18220",
+" X c #9E801F",
+" Y c #907B1B",
+" Z c #446013",
+" & c #185117",
+"0 c #40771D",
+"00 c #ECC44E",
+"01 c #F8CF59",
+"02 c #DDBD51",
+"03 c #D9C259",
+"04 c #D9CA60",
+"05 c #D9CF67",
+"06 c #E5E076",
+"07 c #FFFB8B",
+"08 c #E3D863",
+"09 c #3C701E",
+"0a c #D4C250",
+"0b c #FEDB6B",
+"0c c #F1CC5E",
+"0d c #CBAE44",
+"0e c #C2A53D",
+"0f c #BB9E37",
+"0g c #BA9B36",
+"0h c #C7A43A",
+"0i c #C19F36",
+"0j c #606F19",
+"0k c #A8B456",
+"0l c #B99C3A",
+"0m c #AE8E29",
+"0n c #97801E",
+"0o c #9A831D",
+"0p c #98821C",
+"0q c #96801B",
+"0r c #A08321",
+"0s c #9C7F1D",
+"0t c #947B18",
+"0u c #1F4811",
+"0v c #3E721C",
+"0w c #E2BB46",
+"0x c #EEC651",
+"0y c #B39721",
+"0z c #6F630F",
+"0A c #6A5E0F",
+"0B c #968326",
+"0C c #FFEA77",
+"0D c #F2DB6A",
+"0E c #687514",
+"0F c #CCB449",
+"0G c #F7D162",
+"0H c #B69C34",
+"0I c #74670F",
+"0J c #685C0F",
+"0K c #675C0E",
+"0L c #7D6D14",
+"0M c #CBAC3E",
+"0N c #BF9D34",
+"0O c #6F6515",
+"0P c #9A9A3C",
+"0Q c #B99C35",
+"0R c #AE8E28",
+"0S c #6A600B",
+"0T c #63590D",
+"0U c #5F560C",
+"0V c #6F620D",
+"0W c #D3BF67",
+"0X c #9F8321",
+"0Y c #9A7D1C",
+"0Z c #253207",
+"0& c #3B6E1C",
+"1 c #DBB641",
+"10 c #E6BF4A",
+"11 c #E1BC45",
+"12 c #D8B849",
+"13 c #D7B84D",
+"14 c #D9BB51",
+"15 c #F6D35E",
+"16 c #FEDA67",
+"17 c #D9B94C",
+"18 c #615E0D",
+"19 c #C9AD42",
+"1a c #ECC758",
+"1b c #B59B2E",
+"1c c #0D1D07",
+"1d c #081907",
+"1e c #1B280B",
+"1f c #D8B549",
+"1g c #BD9C33",
+"1h c #736716",
+"1i c #959535",
+"1j c #B89B32",
+"1k c #AD8E27",
+"1l c #3A3F08",
+"1m c #081B08",
+"1n c #122308",
+"1o c #E9D97D",
+"1p c #9F8323",
+"1q c #9A7E1B",
+"1r c #243107",
+"1s c #39691B",
+"1t c #D5B03C",
+"1u c #DFB943",
+"1v c #E4BE49",
+"1w c #E9C34E",
+"1x c #EDC753",
+"1y c #EEC854",
+"1z c #F3CD5A",
+"1A c #F3CD5B",
+"1B c #C9AB37",
+"1C c #303809",
+"1D c #C3A73B",
+"1E c #E4C050",
+"1F c #B1972B",
+"1G c #0C1D07",
+"1H c #081908",
+"1I c #0D2B0D",
+"1J c #20320E",
+"1K c #D6B047",
+"1L c #BC9B31",
+"1M c #726615",
+"1N c #959434",
+"1O c #B79B31",
+"1P c #AC8D26",
+"1Q c #393E08",
+"1R c #16290A",
+"1S c #F9E47A",
+"1T c #9F8322",
+"1U c #233107",
+"1V c #38661A",
+"1W c #D1AC38",
+"1X c #D9B43E",
+"1Y c #A68C24",
+"1Z c #917B1D",
+"1& c #927C1D",
+"2 c #8B771B",
+"20 c #A88E2F",
+"21 c #E8C350",
+"22 c #DDBA48",
+"23 c #48490D",
+"24 c #BBA237",
+"25 c #DCB949",
+"26 c #AC9228",
+"27 c #0C1C07",
+"28 c #103310",
+"29 c #194D18",
+"2a c #2B5719",
+"2b c #D1AD40",
+"2c c #BA9A2F",
+"2d c #706515",
+"2e c #938C33",
+"2f c #B6982F",
+"2g c #AB8D25",
+"2h c #383D08",
+"2i c #081A08",
+"2j c #1B340E",
+"2k c #FAE470",
+"2l c #233007",
+"2m c #386519",
+"2n c #CCA934",
+"2o c #D4AF39",
+"2p c #AF951E",
+"2q c #1F2C09",
+"2r c #081A07",
+"2s c #524F13",
+"2t c #DEBB48",
+"2u c #D7B443",
+"2v c #6D650E",
+"2w c #B59C37",
+"2x c #D4B242",
+"2y c #A88F25",
+"2z c #0F2E0E",
+"2A c #184917",
+"2B c #2A5318",
+"2C c #CDAB3B",
+"2D c #B8982D",
+"2E c #6D6213",
+"2F c #948732",
+"2G c #B5962E",
+"2H c #AA8C24",
+"2I c #5D5917",
+"2J c #5C5816",
+"2K c #636317",
+"2L c #C7B04A",
+"2M c #9C801B",
+"2N c #967B19",
+"2O c #192807",
+"2P c #396418",
+"2Q c #C9A631",
+"2R c #CFAB36",
+"2S c #AF931E",
+"2T c #4F4F12",
+"2U c #D7B441",
+"2V c #D0AE3D",
+"2W c #6C630E",
+"2X c #B19636",
+"2Y c #CEAD3D",
+"2Z c #A48B23",
+"2& c #0C1B07",
+"3 c #0C250B",
+"30 c #174716",
+"31 c #295018",
+"32 c #C9A837",
+"33 c #B5962B",
+"34 c #6B6012",
+"35 c #93832F",
+"36 c #B3942C",
+"37 c #A98B23",
+"38 c #A78921",
+"39 c #A48720",
+"3a c #A1841E",
+"3b c #9F831D",
+"3c c #9D811C",
+"3d c #665B0E",
+"3e c #081C08",
+"3f c #2A5B1A",
+"3g c #A48929",
+"3h c #A88D29",
+"3i c #A18A18",
+"3j c #22350C",
+"3k c #0D290C",
+"3l c #0E2E0E",
+"3m c #3E4715",
+"3n c #AB902F",
+"3o c #AA9229",
+"3p c #655D0D",
+"3q c #8F7B27",
+"3r c #A9912B",
+"3s c #927E1A",
+"3t c #111F07",
+"3u c #0B210A",
+"3v c #164415",
+"3w c #214915",
+"3x c #AE9529",
+"3y c #9D8720",
+"3z c #635C0F",
+"3A c #7A6F1B",
+"3B c #9C861F",
+"3C c #96821A",
+"3D c #958119",
+"3E c #938017",
+"3F c #927F16",
+"3G c #907F15",
+"3H c #827411",
+"3I c #55510B",
+"3J c #0F2008",
+"3K c #1A5519",
+"3L c #102108",
+"3M c #283109",
+"3N c #293109",
+"3O c #194F18",
+"3P c #195018",
+"3Q c #222E09",
+"3R c #2A3109",
+"3S c #55290A",
+"3T c #343615",
+"3U c #2B3109",
+"3V c #272E09",
+"3W c #071707",
+"3X c #0C240B",
+"3Y c #164115",
+"3Z c #154015",
+"3& c #2C3D0E",
+"4 c #152108",
+"40 c #142108",
+"41 c #262E08",
+"42 c #262F08",
+"43 c #252F08",
+"44 c #263008",
+"45 c #112108",
+"46 c #174A15",
+"47 c #154414",
+"48 c #194E17",
+"49 c #184C17",
+"4a c #184A17",
+"4b c #394726",
+"4c c #4A2F16",
+"4d c #D45629",
+"4e c #914C1D",
+"4f c #0E1C0A",
+"4g c #3D371C",
+"4h c #3B401D",
+"4i c #153E14",
+"4j c #133912",
+"4k c #081808",
+"4l c #071807",
+"4m c #081807",
+"4n c #195318",
+"4o c #184D17",
+"4p c #184B17",
+"4q c #174917",
+"4r c #174816",
+"4s c #DD9762",
+"4t c #E98A54",
+"4u c #6B4E22",
+"4v c #604F22",
+"4w c #544D22",
+"4x c #43411C",
+"4y c #C66232",
+"4z c #C5602F",
+"4A c #1A3F15",
+"4B c #143C14",
+"4C c #2A4419",
+"4D c #614F25",
+"4E c #1D1F0B",
+"4F c #222B0F",
+"4G c #1F220C",
+"4H c #171F0A",
+"4I c #101D09",
+"4J c #195118",
+"4K c #0C260B",
+"4L c #0F300E",
+"4M c #174916",
+"4N c #6E8C5A",
+"4O c #688054",
+"4P c #7E5B28",
+"4Q c #835726",
+"4R c #585225",
+"4S c #554E23",
+"4T c #5F582B",
+"4U c #BDA46C",
+"4V c #A37542",
+"4W c #695123",
+"4X c #515524",
+"4Y c #4D5424",
+"4Z c #7F5626",
+"4& c #DF6430",
+"5 c #523915",
+"50 c #273515",
+"51 c #1F3012",
+"52 c #AE5424",
+"53 c #F46A30",
+"54 c #303714",
+"55 c #192A0F",
+"56 c #16280E",
+"57 c #92481C",
+"58 c #F9672B",
+"59 c #413713",
+"5a c #0E2D0D",
+"5b c #184F17",
+"5c c #174A16",
+"5d c #234C1B",
+"5e c #E18C6A",
+"5f c #DF7756",
+"5g c #6D6331",
+"5h c #626632",
+"5i c #5D602C",
+"5j c #565226",
+"5k c #694E25",
+"5l c #C25C32",
+"5m c #8D4520",
+"5n c #4E4B22",
+"5o c #4F4C22",
+"5p c #605D2B",
+"5q c #846B36",
+"5r c #80602C",
+"5s c #615E2A",
+"5t c #5F612B",
+"5u c #61622C",
+"5v c #885D28",
+"5w c #985824",
+"5x c #5F612A",
+"5y c #5E6029",
+"5z c #5D5F28",
+"5A c #9C5622",
+"5B c #AF3810",
+"5C c #204012",
+"5D c #144113",
+"5E c #184D16",
+"5F c #174C16",
+"5G c #174B16",
+"5H c #164515",
+"5I c #5C421B",
+"5J c #54280B",
+"5K c #626737",
+"5L c #626736",
+"5M c #5E6231",
+"5N c #777450",
+"5O c #7D7956",
+"5P c #5D4A22",
+"5Q c #584A22",
+"5R c #4F4A22",
+"5S c #514C23",
+"5T c #925C30",
+"5U c #EF8A52",
+"5V c #82592B",
+"5W c #60612D",
+"5X c #63642E",
+"5Y c #946931",
+"5Z c #FA7E40",
+"5& c #8F612C",
+"6 c #61632B",
+"60 c #60622A",
+"61 c #5D6029",
+"62 c #EA6129",
+"63 c #E5662B",
+"64 c #144013",
+"65 c #164715",
+"66 c #224718",
+"67 c #4C5326",
+"68 c #51572A",
+"69 c #565B2D",
+"6a c #575C2F",
+"6b c #575C2E",
+"6c c #CC8C79",
+"6d c #ECB5A4",
+"6e c #633C1A",
+"6f c #504A24",
+"6g c #534E26",
+"6h c #565128",
+"6i c #645128",
+"6j c #874D24",
+"6k c #705D2D",
+"6l c #646230",
+"6m c #666330",
+"6n c #895C2A",
+"6o c #AF4F21",
+"6p c #7A602B",
+"6q c #64652E",
+"6r c #62642C",
+"6s c #67612A",
+"6t c #A44519",
+"6u c #9A320C",
+"6v c #133F12",
+"6w c #50733D",
+"6x c #CCD59D",
+"6y c #836B42",
+"6z c #40481F",
+"6A c #454C22",
+"6B c #484E24",
+"6C c #4C5126",
+"6D c #505529",
+"6E c #563C1C",
+"6F c #661F08",
+"6G c #393217",
+"6H c #4F4A26",
+"6I c #56512B",
+"6J c #887E4F",
+"6K c #C2A870",
+"6L c #7C6B3F",
+"6M c #686136",
+"6N c #6D6739",
+"6O c #76683A",
+"6P c #98733F",
+"6Q c #7E713A",
+"6R c #6B6D36",
+"6S c #696B34",
+"6T c #666831",
+"6U c #6E6830",
+"6V c #90642C",
+"6W c #3F4718",
+"6X c #133E12",
+"6Y c #164915",
+"6Z c #164815",
+"6& c #164615",
+"7 c #72491E",
+"70 c #D36844",
+"71 c #8B3916",
+"72 c #3E451D",
+"73 c #3E451E",
+"74 c #40471F",
+"75 c #414720",
+"76 c #454A21",
+"77 c #454421",
+"78 c #3C391B",
+"79 c #413D1E",
+"7a c #4F4927",
+"7b c #57512E",
+"7c c #9D5530",
+"7d c #D67447",
+"7e c #754E2C",
+"7f c #7A744A",
+"7g c #827A50",
+"7h c #957548",
+"7i c #F27F46",
+"7j c #C16D3A",
+"7k c #757744",
+"7l c #767843",
+"7m c #71733D",
+"7n c #916531",
+"7o c #F3632B",
+"7p c #BF5D27",
+"7q c #183F13",
+"7r c #29260B",
+"7s c #373413",
+"7t c #3D441C",
+"7u c #3D441D",
+"7v c #75795D",
+"7w c #B0B0A2",
+"7x c #5A5337",
+"7y c #3F3B1C",
+"7z c #443F1F",
+"7A c #4B4625",
+"7B c #55502D",
+"7C c #5B5230",
+"7D c #634A2B",
+"7E c #7C724A",
+"7F c #837C54",
+"7G c #898359",
+"7H c #977C52",
+"7I c #893F1F",
+"7J c #804F2D",
+"7K c #807D51",
+"7L c #828451",
+"7M c #7D804C",
+"7N c #806436",
+"7O c #9F3D18",
+"7P c #69350D",
+"7Q c #164614",
+"7R c #154514",
+"7S c #314218",
+"7T c #2C3614",
+"7U c #3A421B",
+"7V c #3C431C",
+"7W c #3C441C",
+"7X c #AB6A52",
+"7Y c #E8ADA1",
+"7Z c #6B371D",
+"7& c #3C391A",
+"8 c #403C1D",
+"80 c #464221",
+"81 c #4F4A28",
+"82 c #595330",
+"83 c #645E38",
+"84 c #6E6741",
+"85 c #77714A",
+"86 c #7F7850",
+"87 c #827C53",
+"88 c #847E54",
+"89 c #827C52",
+"8a c #7F7950",
+"8b c #7D794D",
+"8c c #7B7D4B",
+"8d c #595D35",
+"8e c #0D2C0D",
+"8f c #113810",
+"8g c #164714",
+"8h c #918E53",
+"8i c #6D733F",
+"8j c #3A431A",
+"8k c #3B431B",
+"8l c #3B431C",
+"8m c #3D431C",
+"8n c #2F2E11",
+"8o c #461B06",
+"8p c #2D220D",
+"8q c #3D391B",
+"8r c #413D1D",
+"8s c #474221",
+"8t c #ABA88F",
+"8u c #BEBC96",
+"8v c #685C37",
+"8w c #605A34",
+"8x c #67613B",
+"8y c #6D6740",
+"8z c #716B43",
+"8A c #736D45",
+"8B c #756F47",
+"8C c #767048",
+"8D c #757047",
+"8E c #746E45",
+"8F c #716C43",
+"8G c #595A34",
+"8H c #0A2009",
+"8I c #10330F",
+"8J c #3C4F1D",
+"8K c #EB935C",
+"8L c #DA6B3C",
+"8M c #3F3E17",
+"8N c #3B431A",
+"8O c #3C421C",
+"8P c #303215",
+"8Q c #2A2811",
+"8R c #3E3A1B",
+"8S c #423E1E",
+"8T c #BB6D53",
+"8U c #E49F7D",
+"8V c #5F4624",
+"8W c #5C5631",
+"8X c #645E37",
+"8Y c #CF9860",
+"8Z c #DE995E",
+"8& c #74623A",
+"9 c #6B653E",
+"90 c #6B663E",
+"91 c #6B653D",
+"92 c #68633B",
+"93 c #8B6034",
+"94 c #2F290F",
+"95 c #154614",
+"96 c #513A0F",
+"97 c #6A380E",
+"98 c #174214",
+"99 c #214216",
+"9a c #304218",
+"9b c #39431B",
+"9c c #616646",
+"9d c #6E7255",
+"9e c #4A502B",
+"9f c #3E431D",
+"9g c #3D3C1B",
+"9h c #423E1D",
+"9i c #464220",
+"9j c #473719",
+"9k c #48250D",
+"9l c #59532D",
+"9m c #5D5730",
+"9n c #605A33",
+"9o c #C8461F",
+"9p c #DC6333",
+"9q c #5D502D",
+"9r c #666139",
+"9s c #726037",
+"9t c #FB7338",
+"9u c #FF7538",
+"9v c #1F240C",
+"9w c #144313",
+"9x c #144213",
+"9y c #163F13",
+"9z c #B6A08E",
+"9A c #FBF1EF",
+"9B c #874F30",
+"9C c #3F451D",
+"9D c #3F421D",
+"9E c #403C1C",
+"9F c #433F1E",
+"9G c #474220",
+"9H c #4C4723",
+"9I c #4F4A25",
+"9J c #534D28",
+"9K c #56502A",
+"9L c #59542D",
+"9M c #5C562F",
+"9N c #4E4423",
+"9O c #493317",
+"9P c #5D5832",
+"9Q c #625C35",
+"9R c #625D35",
+"9S c #73542D",
+"9T c #A52807",
+"9U c #C5350F",
+"9V c #101F09",
+"9W c #081D08",
+"9X c #133E13",
+"9Y c #4F350D",
+"9Z c #98310F",
+"9& c #443910",
+"a c #223E16",
+"a0 c #333C19",
+"a1 c #6A664A",
+"a2 c #565130",
+"a3 c #4E4924",
+"a4 c #514C26",
+"a5 c #544E29",
+"a6 c #57512B",
+"a7 c #59532C",
+"a8 c #5A552E",
+"a9 c #5E5931",
+"aa c #5E5932",
+"ab c #4D4A27",
+"ac c #1D1F09",
+"ad c #144413",
+"ae c #143F13",
+"af c #133D12",
+"ag c #133C12",
+"ah c #133B12",
+"ai c #0B1B09",
+"aj c #2C341E",
+"ak c #FFFFFF",
+"al c #F3E4D9",
+"am c #534622",
+"an c #504A25",
+"ao c #534D27",
+"ap c #554F29",
+"aq c #56512A",
+"ar c #58522B",
+"as c #59542C",
+"at c #5A552D",
+"au c #5B562E",
+"av c #5C572F",
+"aw c #5B562F",
+"ax c #13230D",
+"ay c #091D08",
+"az c #154413",
+"aA c #131A07",
+"aB c #A22F13",
+"aC c #AA3E23",
+"aD c #19250E",
+"aE c #2E3317",
+"aF c #434220",
+"aG c #534E27",
+"aH c #7A683C",
+"aI c #BF935C",
+"aJ c #866C3E",
+"aK c #58532B",
+"aL c #58532C",
+"aM c #59552D",
+"aN c #17270F",
+"aO c #092009",
+"aP c #0E2C0D",
+"aQ c #0D1D09",
+"aR c #8E6038",
+"aS c #F5A266",
+"aT c #B87948",
+"aU c #514D27",
+"aV c #57522A",
+"aW c #57532B",
+"aX c #5C542B",
+"aY c #1C2A11",
+"aZ c #091E08",
+"a& c #134012",
+"b c #0C280B",
+"b0 c #311D07",
+"b1 c #832205",
+"b2 c #5B2006",
+"b3 c #0B1D09",
+"b4 c #19270F",
+"b5 c #2A3316",
+"b6 c #3D401F",
+"b7 c #4E4C26",
+"b8 c #C66D36",
+"b9 c #E06E35",
+"ba c #8B4D22",
+"bb c #144513",
+"bc c #0E2E0D",
+"bd c #D04E1D",
+"be c #F0652D",
+"bf c #9F5023",
+"bg c #144112",
+"bh c #134112",
+"bi c #123D11",
+"bj c #0C280C",
+"bk c #0D2B0C",
+"bl c #4C2307",
+"bm c #852606",
+"bn c #3E2207",
+" 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u",
+" v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z &",
+"0 000102030405060708090a0b0c0d0e0f0g0h0i0j0k0l0m0n0o0p0q0r0s0t0u",
+"0v0w0x0y0z0A0A0B0C0D0E0F0G0H0I0J0K0L0M0N0O0P0Q0R0S0T0U0V0W0X0Y0Z",
+"0&1 101112131415161718191a1b1c1d1d1e1f1g1h1i1j1k1l1m1m1n1o1p1q1r",
+"1s1t1u1v1w1x1y1z1A1B1C1D1E1F1G1H1I1J1K1L1M1N1O1P1Q1m1m1R1S1T1q1U",
+"1V1W1X1Y1Z1&2 202122232425262728292a2b2c2d2e2f2g2h2i1m2j2k0X1q2l",
+"2m2n2o2p2q2i2r2s2t2u2v2w2x2y272z2A2B2C2D2E2F2G2H0O2I2J2K2L2M2N2O",
+"2P2Q2R2S2q2r1d2T2U2V2W2X2Y2Z2&3 303132333435363738393a3b3c2M3d3e",
+"3f3g3h3i3j3k3l3m3n3o3p3q3r3s3t3u3v3w3x3y3z3A3B3C3D3E3F3G3H3I3J3e",
+"3K3L3M3N3O3P3O293Q3R3S3T3U3V3W3X3Y3Z3&3V4 40414142434344451m1m3e",
+"461m2i2i4748494a4b4c4d4e4f3W4g4h4i4i4j4k3W3W4l4l4m1d1d2r2i1m1m3e",
+"4n1m2i2r4o4p4q4r4s4t4u4v4w4x4y4z4A4B4C4D4E3W3W4F4G1d1d1d4H4I1m3e",
+"4J4K1I4L4p4M4N4O4P4Q4R4S4T4U4V4W4X4Y4Z4&5 505152535455565758595a",
+"5b4o495c4M5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5s5t5u5v5w5x5y5z5A5B5C5D",
+"5E5F5G4r4r5H5I5J5K5L5M5N5O5P5Q5R5S5T5U5V5W5X5Y5Z5&6 606162636464",
+"5G5c4M655H666768696a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v64",
+"5c4M656w6x6y6z6A6B6C6D6E6F6G6H6I6J6K6L6M6N6O6P6Q6R6S6T6U6V6W6X6v",
+"6Y6Z6&7 707172737475767778797a7b7c7d7e7f7g7h7i7j7k7l7m7n7o7p6X6v",
+"6Z656&7q7r7s7t7u727v7w7x7y7z7A7B7C7D7E7F7G7H7I7J7K7L7M7N7O7P6X6v",
+"6Z7Q7R7S7T7U7V7W7u7X7Y7Z7&8 80818283848586878887898a8b8c8d8e8f6X",
+"8g8h8i8j8k8k8l7V8m8n8o8p8q8r8s8t8u8v8w8x8y8z8A8B8C8D8E8F8G1m8H8I",
+"8J8K8L8M8N8k8k7V7t8O8P8Q8R8S8s8T8U8V8W8w8X8Y8Z8&9 90919293943e3e",
+"95969798999a9b9c9d9e9f9g8R9h9i9j9k7a9l9m9n9o9p9q9r9r9r9s9t9u9v3e",
+"7R479w9x5D649y9z9A9B9C9D9E9F9G9H9I9J9K9L9M9N9O9P9Q9R9R9S9T9U9V9W",
+"7R479w9x5D649X9Y9Z9&a a09E9Fa1a2a3a4a5a6a7a89M9ma9aaaaa9abac3e9W",
+"7Rad9w9x5Dae6v6Xafagah5aaiajakalamanaoapaqarasatauauavawauax9Way",
+"az9w9w9x5D646v6Xafagag8I1daAaBaCaDaEaFaGaHaIaJaKaL9L9LaMasaNayaO",
+"ad9w9w9x5D646v6XafafagaP2r2r2r2r2r2r2raQaRaSaTaUaqaVaWaWaXaYayaZ",
+"adad9w9x5Da&6v6v6Xafafb 2i2i2i2i2i2i2i2ib0b1b2b3b4b5b6b7b8b9baaZ",
+"bbad9w9x5Da&a&6v6X6Xafbc1m1m1m1m1m1m1m1m1m1m1m3e3e3e9WaybdbebfaZ",
+"bbad9w9xbgbha&6v6vbibjbk3e1m1may1m1m1m1m3e3e3e9W9WayaZaZblbmbnaO"};
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/rp_help.mel b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/rp_help.mel
new file mode 100644
index 0000000..3f8bd46
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/rp_help.mel
@@ -0,0 +1,184 @@
+/* rpts_help.mel
+
+This script may be freely distributed. Modify at your own risk.
+
+Author: Dirk Bialluch (DirkBi@Software2000.de)
+
+Creation date: 15.10.2000
+Last update: 15.10.2000
+
+*/
+
+//
+// Create UI
+//
+
+global proc rp_help ( int $function )
+{
+ int $uiLabelWidth = 150;
+ int $uiInputWidth = 80;
+ int $uiWidth = $uiLabelWidth + $uiInputWidth + 220;
+
+ if ( `window -exists rp_help` )
+ deleteUI rp_help;
+
+ window
+ -maximizeButton false
+ -resizeToFitChildren false
+ -title "Randomize Points Help"
+ -iconName "Ranomdize Points Help" rp_help;
+
+ tabLayout -innerMarginWidth 5 -innerMarginHeight 5 -childResizable true rp_helpTab;
+ string $rp1_form = `formLayout -numberOfDivisions 100 "Randomize Points"`;
+ string $rp1_scroll = `scrollLayout -hst 16 -vst 16 -childResizable true -minChildWidth $uiWidth`;
+ columnLayout -adjustableColumn true -rowSpacing 6;
+// randomize points - instructions
+ frameLayout
+ -label "Instructions"
+ -labelAlign "center"
+ -cll false
+ -lw $uiWidth
+ -mh 3
+ -borderStyle "etchedIn"
+ -bv true;
+ columnLayout -adjustableColumn true;
+ rowLayout
+ -numberOfColumns 1
+ -cat 1 "left" 5;
+ text rp1_instructions;
+ setParent ..;
+ setParent ..;
+ setParent ..;
+ setParent ..;
+ setParent ..;
+
+ string $rp1_button = `button
+ -label "Close"
+ -command "deleteUI rp_help"`;
+ setParent ..;
+
+ string $rp2_form = `formLayout -numberOfDivisions 100 "About"`;
+ string $rp2_scroll = `scrollLayout -hst 16 -vst 16 -childResizable true -minChildWidth $uiWidth`;
+ columnLayout -adjustableColumn true -rowSpacing 6;
+// about
+ frameLayout
+ -label "About Randomize Points"
+ -labelAlign "center"
+ -cll false
+ -lw $uiWidth
+ -mh 3
+ -borderStyle "etchedIn"
+ -bv true;
+ columnLayout -adjustableColumn true;
+ rowLayout
+ -numberOfColumns 1
+ -cat 1 "left" 5;
+ text rp2_instructions;
+ setParent ..;
+ setParent ..;
+ setParent ..;
+ setParent ..;
+ setParent ..;
+
+ string $rp2_button = `button
+ -label "Close"
+ -command "deleteUI rp_help"`;
+
+ // set form layouts
+ formLayout -edit
+ -attachForm $rp1_scroll "top" 4
+ -attachForm $rp1_scroll "left" 4
+ -attachControl $rp1_scroll "bottom" 4 $rp1_button
+ -attachForm $rp1_scroll "right" 4
+ $rp1_form;
+
+ formLayout -edit
+ -attachNone $rp1_button "top"
+ -attachForm $rp1_button "left" 4
+ -attachForm $rp1_button "bottom" 4
+ -attachForm $rp1_button "right" 4
+ $rp1_form;
+
+ formLayout -edit
+ -attachForm $rp2_scroll "top" 4
+ -attachForm $rp2_scroll "left" 4
+ -attachControl $rp2_scroll "bottom" 4 $rp2_button
+ -attachForm $rp2_scroll "right" 4
+ $rp2_form;
+
+ formLayout -edit
+ -attachNone $rp2_button "top"
+ -attachForm $rp2_button "left" 4
+ -attachForm $rp2_button "bottom" 4
+ -attachForm $rp2_button "right" 4
+ $rp2_form;
+/*
+ Enable Axes
+ Enable/disable the world space, object space or distance axes depending on the Transform
+ Mode settings.
+*/
+ string $rp1_instructions =
+ "This tool randomizes the position of selected CV´s, Poly Vertices and Lattice Points.\n" +
+ "\n" +
+ "Workflow tips\n" +
+ " To avoid problems at object poles when deforming eg a nurbs sphere, better bind\n" +
+ " the object to a lattice and randomize the lattice points instead.\n" +
+ "\n" +
+ "Intensity\n" +
+ " The Intensity value is measured in world or object space units depending on the.\n" +
+ " chosen Transform Mode. A value of 1 will displace the selected points within a\n" +
+ " maximum range of -0.5 to 0.5, if Intensity Range is set to 0. If you are using the\n" +
+ " object space mode, object scale values are taken into account.\n" +
+ "\n" +
+ "Intensity Range\n" +
+ " Shift the displacement toward the positive or negative value range. If Intensity is\n" +
+ " set to 2, an Intensity Range of 100% will shift the displacement completely to a\n" +
+ " positive range from 0 to 2. Setting the value to -100% would result in a range from\n" +
+ " -2 to 0.\n" +
+ "\n" +
+ "Min/Max Value\n" +
+ " These values show the final displacement range.\n" +
+ "\n" +
+ "Threshold\n" +
+ " Increase the Threshold value to leave a certain amount of points unaffected. When\n" +
+ " leaving this value at 0, all points will be affected. A value of 0.8 will skip\n" +
+ " approximately 80% of all selected points and randomize the remaining 20%.\n" +
+ "\n" +
+ "Use Seed Value\n" +
+ " Enable/disable the usage of a seed value for the randomize function.\n" +
+ "\n" +
+ "Seed\n" +
+ " The Seed value inits the randomize function, so the deformation is repeatable.\n" +
+ " The function will only produce identical results, if the points are always selected\n" +
+ " in the same order.\n" +
+ "\n" +
+ "Transform Mode\n" +
+ " World Space will displace points along the enabled world space axes.\n" +
+ " Object Space will displace points along the enabled object space axes.\n" +
+ " Distance will displace points along the enabled normal, u and v tangent.\n" +
+ " Lattice points are not affected by this transform node, because they do not have\n" +
+ " UVN properties.\n" +
+ "\n" +
+ "Enable Axes\n" +
+ " Enable/disable the axes depending on the Transform Mode settings.\n";
+
+ string $rp2_instructions =
+ "Randomize Points V1.6\n" +
+ "\n" +
+ "Programmed by Dirk Bialluch, 1998-2000\n" +
+ "\n" +
+ "This script may be freely distributed.\n" +
+ "Modify at your own risk.\n" +
+ "\n" +
+ "Email: 'DirkBi@Software2000.de'\n" +
+ "Homepage: 'http://dirk-bialluch.mayaring.com'";
+
+ text -e -label $rp1_instructions rp1_instructions;
+ text -e -label $rp2_instructions rp2_instructions;
+
+ tabLayout -e -selectTabIndex $function rp_helpTab;
+
+ showWindow rp_help;
+}
+
+// end of script
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/searchReplaceWin.mel b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/searchReplaceWin.mel
new file mode 100644
index 0000000..2bf7f1f
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/searchReplaceWin.mel
@@ -0,0 +1,87 @@
+//
+// Copyright (C) 1997-2001 Alias|Wavefront,
+// a division of Silicon Graphics Limited.
+//
+// The information in this file is provided for the exclusive use of the
+// licensees of Alias|Wavefront. Such users have the right to use, modify,
+// and incorporate this code into other products for purposes authorized
+// by the Alias|Wavefront license agreement, without fee.
+//
+// ALIAS|WAVEFRONT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+// INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+// EVENT SHALL ALIAS|WAVEFRONT BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+// CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+// TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+// PERFORMANCE OF THIS SOFTWARE.
+//
+// Alias|Wavefront Script File
+// MODIFY THIS AT YOUR OWN RISK
+///
+//
+//
+// searchReplaceWin.mel
+// CPAM June 4, 1999
+// revised July 2001
+//
+//
+// This will search and replace object
+// names for selected objects. Suggest
+// using on a skeleton after copying
+// an arm or leg.
+//
+
+
+global proc searchReplace (){
+
+ global string $searchText;
+ global string $replaceText;
+ global string $objects[];
+
+ $objects = `ls -sl`;
+ $searchText = `textField -q -text searchText`;
+ $replaceText = `textField -q -text replaceText`;
+
+ for ($object in $objects){
+
+ string $newName = `substitute $searchText $object $replaceText`;
+ print "Object: ";
+ print $object;
+ print " New name: ";
+ print $newName;
+ print "\n";
+ rename $object $newName;
+ }
+
+}
+
+
+global proc searchReplaceWin (){
+
+ window -title "Object Renamer"
+ objectRenamer;
+ columnLayout;
+
+ text "Search Text:";
+ textField -w 200
+ -text "right"
+ searchText;
+
+ text "Replace Text:";
+ textField -w 200
+ -text "left"
+ replaceText;
+
+ button -label "Search and Replace!"
+ -command "searchReplace"
+ doIt;
+
+ showWindow objectRenamer;
+
+}
+
+
+
+
+
+
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/selectInst.mel b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/selectInst.mel
new file mode 100644
index 0000000..3e01da5
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/selectInst.mel
@@ -0,0 +1,36 @@
+global proc selectInst()
+{
+ string $orig[];
+ clear($orig);
+ $orig = `ls -sl -tr`;
+ string $origShape[];
+ clear($origShape);
+ $origShape = `ls -sl -dag -lf`;
+ string $token[];
+ clear($token);
+ int $numTok;
+ $numTok = `tokenize $origShape[0] "|" $token`;
+ string $select[];
+ clear($select);
+ int $index;
+ int $count;
+ $count = 0;
+// if(`strcmp $orig[0] $token[0]`!=0)
+// { error "No Original Geometry Selected!!";}
+// else
+// {
+ string $objects[]= `ls -tr`;
+ for($object in $objects)
+ {
+ string $objShape[] = `ls -dag -lf $object`;
+ if(`strcmp $origShape[0] $objShape[0]` == 0)
+ {
+ select -add $object;
+ $select[$count] = $object;
+ $count++;
+ }
+ }
+// }
+ print "\n";
+ print $select;
+}
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/setShapeNode.mel b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/setShapeNode.mel
new file mode 100644
index 0000000..0d631df
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/setShapeNode.mel
@@ -0,0 +1,17 @@
+global proc setShapeNode()
+{
+ string $objects[] = `ls -sl -tr`;
+ print ("\n");
+ print $objects;
+ for($object in $objects)
+ {
+ string $shapes[] = `ls -dag -lf $object`;
+ print ("\n");
+ print $shapes;
+ for($shape in $shapes)
+ {
+ string $parents[] = `listRelatives -p $shape`;
+ rename $shape ($parents[0]+ "Shape");
+ }
+ }
+} \ No newline at end of file
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/simpsonsArt.mel b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/simpsonsArt.mel
new file mode 100644
index 0000000..0f6dcf3
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/simpsonsArt.mel
@@ -0,0 +1,334 @@
+/* simpsonsArt.mel
+
+ THIS IS AN UPDATE TO JEFF PIDSADNY'S SIMPSONS ART MENU SCRIPT.
+ THIS REVISION HAS MAINLY CHANGED THE LOOK OF THE GUI AND ADDED
+ ICONS INSTEAD OF TEXT.
+
+ AUTHOR: ARYAN HANBECK
+
+ JULY 03 2002
+
+*/
+
+//
+// SOURCE ALL SCRIPTS AND DEFINE GLOBAL PROCEDURES
+//
+
+
+//===========================================================================
+// validBMP
+//===========================================================================
+// Description: Maya's UI layout will BOMB if you attempt to create a UI
+// control that contains an image (a 'symbolButton' for example)
+// where the specified image does not exist.
+//
+// This function queries the folders specified in the XBMLANGPATH
+// environment variable for the specified BMP image. If the
+// image is found, its name is returned. If the image is not
+// found, the default image "vacantCell.xpm" is returned instead.
+//
+// Suggested use is to specify the image for a control by
+// wrapping it within validBMP(); e.g.:
+//
+// symbolButton -image ( validBMP( "myImage.bmp" );
+//
+// Constraints:
+//
+// Parameters: string $bmp: The name of the BMP image (no path, please).
+//
+// Return: (string): If specified BMP is valid, the BMP name is
+// returned; if the BMP is not valid "vacantCell.xpm"
+// is returned.
+//
+//===========================================================================
+
+
+ proc string validBMP( string $bmp )
+{
+ string $validBMP = "vacantCell.xpm";
+
+ string $pathEnv = `getenv XBMLANGPATH`;
+ string $paths[];
+ tokenize $pathEnv ";" $paths;
+ for ( $p in $paths )
+ {
+ string $bmpPath = ( $p + "/" + $bmp );
+ if ( `file -q -exists $bmpPath` )
+ {
+ $validBMP = $bmp;
+ break;
+ }
+ }
+
+ return $validBMP;
+}
+
+
+source "C:/AW/Maya4.0/scripts/SimpsonsArt/renameScripts.mel";
+source "C:/AW/Maya4.0/scripts/SimpsonsArt/forceUniqueNames.mel";
+source "C:/AW/Maya4.0/scripts/SimpsonsArt/optimizeShaders.mel";
+source "C:/AW/Maya4.0/scripts/SimpsonsArt/mappedPrelightWindow.mel";
+source "C:/AW/Maya4.0/scripts/SimpsonsArt/rndPoints.mel";
+source "C:/AW/Maya4.0/scripts/SimpsonsArt/setShapeNode.mel";
+source "C:/AW/Maya4.0/scripts/SimpsonsArt/yuya_copyFileTex.mel";
+source "C:/AW/Maya4.0/scripts/SimpsonsArt/uvz.mel";
+
+
+
+global proc setShapeNode()
+{
+ source "C:/AW/Maya4.0/scripts/SimpsonsArt/setShapeNode.mel";setShapeNode;
+}
+
+global proc uvz()
+{
+ source "C:/AW/Maya4.0/scripts/SimpsonsArt/uvz.mel";
+}
+
+global proc nameSpaceGui()
+{
+ source "C:/AW/Maya4.0/scripts/SimpsonsArt/nameSpaceGui.mel";
+}
+
+global proc renameTexture()
+{
+ source "C:/AW/Maya4.0/scripts/SimpsonsArt/renameTexture.mel";renameTexture;
+}
+
+global proc simpsonsExporterOptions()
+{
+setAttr "p3dDefaultExporterSetting.exportVertexOffsetAnims" 0;
+setAttr "p3dDefaultExporterSetting.exportVisAnimations" 0;
+setAttr "p3dDefaultExporterSetting.exportAnimations" 0;
+
+}
+
+global proc litOff()
+{
+ string $mats[] = `ls -type pure3dSimpleShader`;
+ for($mat in $mats)
+ {
+ $attr = $mat + ".dynamicallyLit";
+ setAttr $attr 0;
+ $attrs = $mat + ".color";
+ shadingConnection -e -cs on $attrs;
+ FixHWTextureInfo( $mat );
+ }
+// for($mat in $mats)
+// {
+// $attr = $mat + ".doubleSided";
+// setAttr $attr 0;
+// $attrs = $mat + ".color";
+// shadingConnection -e -cs on $attrs;
+// }
+}
+
+global proc backfaceOff()
+{
+ string $objects[] = `ls -sl -dag -s`;
+ print ("\n");
+ print $objects;
+ for($object in $objects)
+ {
+ setAttr ( $object + ".opposite") 0;
+ }
+}
+
+
+if(`window -ex "SAMmainwindow"`)
+{
+ deleteUI -wnd "SAMainWindow";
+}
+
+//
+//CREATE THE GUI WINDOW AND ADD THE BUTTONS
+//
+
+global proc simpsonsArt()
+{
+window
+ -visible 1
+ -title "SAM"
+ -sizeable 0
+ -iconify 0
+ -wh 147 300
+ -maximizeButton 0
+ SAMmainWindow;
+ columnLayout -adj true;
+ frameLayout
+ -label "Geometry"
+ -labelAlign "center"
+ -cll true
+ SAMgeometryFrame;
+
+ rowLayout
+ -numberOfColumns 2
+ -columnWidth 1 68
+ -columnWidth 2 68
+ SAMgeometryRow;
+
+ symbolButton
+ -w 68
+ -h 28
+ -image "C:/AW/Maya4.0/scripts/SimpsonsArt/icons/rnd.bmp"
+ -ann "Random Points"
+ -c "rndPoints"
+ SAMrndPoints;
+ symbolButton
+ -w 68
+ -h 28
+ -image "C:/AW/Maya4.0/scripts/SimpsonsArt/icons/backfaceoff.bmp"
+ -ann "Backface Off"
+ -c "backfaceOff"
+ SAMbackfaceOff;
+ setParent ..;
+ setParent ..;
+
+ frameLayout
+ -label "Lighting"
+ -labelAlign "center"
+ -cll true
+ -bv true
+ SAMlightingFrame;
+ rowLayout
+ -numberOfColumns 2
+ -columnWidth 1 68
+ -columnWidth 2 68
+ SAMlightingRow;
+ symbolButton
+ -w 68
+ -h 28
+ -image "C:/AW/Maya4.0/scripts/SimpsonsArt/icons/prelighttool.bmp"
+ -ann "Simpsons Prelight"
+ -c "mappedPrelightWindow"
+ SAMsimpsonsPreLight;
+ symbolButton
+ -w 68
+ -h 28
+ -image "C:/AW/Maya4.0/scripts/SimpsonsArt/icons/prelitoff.bmp"
+ -ann "Prelit Off"
+ -c "litOff"
+ SAMpreLitOff;
+ setParent ..;
+ setParent ..;
+
+ frameLayout
+ -label "Textures"
+ -labelAlign "center"
+ -cll true
+ -bv true
+ SAMtextureFrame;
+ columnLayout -adjustableColumn 1 SAMtextureColumn;
+ rowLayout
+ -numberOfColumns 2
+ -columnWidth 1 68
+ -columnWidth 2 68
+ SAMtextureRow;
+ symbolButton
+ -w 68
+ -h 28
+ -image "C:/AW/Maya4.0/scripts/SimpsonsArt/icons/renametex.bmp"
+ -ann "RenameTextures"
+ -c "renameTexture"
+ SAMrenameTextures;
+ symbolButton
+ -w 68
+ -h 28
+ -image "C:/AW/Maya4.0/scripts/SimpsonsArt/icons/movetex.bmp"
+ -ann "Move Textures"
+ -c "yuya_copyFileTex"
+ SAMoveFiles;
+ setParent ..;
+ rowLayout
+ -numberOfColumns 2
+ -columnWidth 1 68
+ -columnWidth 2 68
+ SAMtextureRow2;
+ symbolButton
+ -w 68
+ -h 28
+ -image "C:/AW/Maya4.0/scripts/SimpsonsArt/icons/optimizetex.bmp"
+ -ann "Optimize Shaders"
+ -c "optimizeShaders"
+ SAMoptimizeShaders;
+ symbolButton
+ -w 68
+ -h 28
+ -image "C:/AW/Maya4.0/scripts/SimpsonsArt/icons/uvz.bmp"
+ -ann "UVz Utility"
+ -c "uvz"
+ SAMuvz;
+ setParent ..;
+ setParent ..;
+ setParent ..;
+ frameLayout
+ -label "Hypergraph"
+ -labelAlign "center"
+ -cll true
+ -bv true
+ SAMhypergraphFrame;
+ columnLayout -adjustableColumn 1 SAMhypegraphColumn;
+ rowLayout
+ -numberOfColumns 2
+ -columnWidth 1 68
+ -columnWidth 2 68
+ SAMhypergraphRow;
+ symbolButton
+ -w 68
+ -h 28
+ -image "C:/AW/Maya4.0/scripts/SimpsonsArt/icons/setshape.bmp"
+ -ann "Set Shape Node"
+ -c "setShapeNode"
+ SAMsetShapeNode;
+ symbolButton
+ -w 68
+ -h 28
+ -image "C:/AW/Maya4.0/scripts/SimpsonsArt/icons/removetxt.bmp"
+ -ann "Remove Text String"
+ -c "nameSpaceGui"
+ SAMremoveTextString;
+ setParent ..;
+ rowLayout
+ -numberOfColumns 2
+ -columnWidth 1 68
+ -columnWidth 2 68
+ SAMHypergraphRow2;
+ symbolButton
+ -w 68
+ -h 28
+ -image "C:/AW/Maya4.0/scripts/SimpsonsArt/icons/unique.bmp"
+ -ann "Force Unique Names"
+ -c "forceUniqueNames"
+ SAMforceUniqueNames;
+ symbolButton
+ -w 68
+ -h 28
+ -image "C:/AW/Maya4.0/scripts/SimpsonsArt/icons/p3d.bmp"
+ -ann "Set Exporter Options"
+ -c "simpsonsExporterOptions"
+ SAMsetExporterOptions;
+ setParent ..;
+ rowLayout
+ -numberOfColumns 2
+ -columnWidth 1 68
+ -columnWidth 2 68
+ SAMhypergraphRow3;
+ string $name = `textField -width 68`;
+ symbolButton
+ -w 68
+ -h 28
+ -image "C:/AW/Maya4.0/scripts/SimpsonsArt/icons/renamesh.bmp"
+ -ann "Rename Shapes"
+ -c ("renameShape `textField -q -text " + $name + "`")
+ renameShape;
+ setParent ..;
+ setParent ..;
+ setParent ..;
+ setParent ..;
+
+ window -e
+ -wh 147 295
+ SAMmainWindow;
+
+}
+// end of script \ No newline at end of file
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/snapCurveY.mel b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/snapCurveY.mel
new file mode 100644
index 0000000..8292125
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/snapCurveY.mel
@@ -0,0 +1,75 @@
+global proc int srrRound( float $val )
+{
+ int $intPart = trunc( $val );
+ float $decPart = $val - $intPart;
+
+ $val = $intPart;
+ if ( $decPart >= 0.5 ) $val += 1;
+
+ return $val;
+}
+
+
+global proc snapCurveY( float $precision )
+{
+ $precision = abs( $precision );
+
+ string $curves[];
+ $curves = `ls -type nurbsCurve`;
+
+ string $curve;
+ for ( $curve in $curves )
+ {
+ int $numcvs;
+ string $curvecmd = ($curve + ".cp");
+ $numcvs = `eval getAttr -size $curvecmd`;
+
+ float $cv[ 3 ];
+ int $i = 0;
+ for ( $i = 0; $i < $numcvs; $i++ )
+ {
+ $curvecmd = ($curve + ".cp[" + $i + "]");
+ $cv = `eval getAttr $curvecmd`;
+
+ if ( $precision == 1 )
+ {
+ $cv[ 1 ] = ceil( $cv[ 1 ] );
+ }
+
+ if ( $precision > 1 )
+ {
+ float $div = $cv[ 1 ] / $precision;
+
+ int $integerpart = trunc( $div );
+ float $decpart = $div - $integerpart;
+
+ if ( $decpart < 0.5 )
+ {
+ $decpart = 0;
+ }
+ else
+ {
+ $decpart = 1;
+ }
+
+ float $newdiv = $integerpart + $decpart;
+
+ $cv[ 1 ] = $precision * $newdiv;
+ }
+
+ if ( $precision < 1 )
+ {
+ float $div = $cv[ 1 ] / $precision;
+
+ $div = srrRound( $div );
+
+ float $newdec = $precision * $div;
+
+ $cv[ 1 ] = $newdec;
+ }
+
+ $curvecmd = ($curve + ".cp[" + $i + "].yv");
+ eval setAttr $curvecmd $cv[ 1 ];
+ }
+ }
+}
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/uvz.mel b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/uvz.mel
new file mode 100644
index 0000000..a53ed85
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/uvz.mel
@@ -0,0 +1,226 @@
+//===========================================================================
+// Copyright ©2001 Radical Entertainment Ltd. All rights reserved.
+//
+// Created: 13 Nov 2001
+//
+// Component: MEL Script for Maya.
+// Provides useful UV editing operations.
+//
+// Creator: Bryan Ewert
+//
+// Version: 1.0
+// Tested on Maya v3 and v4.
+//
+//===========================================================================
+
+// ××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
+//
+// How to use:
+//
+// Call this script. A UI will be provided with the following functions:
+//
+// Spin: Spins the UVs around the selected face(s).
+//
+// Reverse Spin: Spins the UVs the other direction.
+// Auto Map Cut: Cuts the UV seams on all edges of the face prior
+// to performing the Spin operation.
+//
+// Note: The "Auto Map Cut" option is always immediately turned off.
+// It is only necessary to cut the edges once for a particular
+// face, and the Construction History stack will be inflated
+// with unnecessary 'polyMapCut' operations if not. //
+//
+// ××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
+
+//===========================================================================
+// getUVsInOrder
+//===========================================================================
+// Description: Returns the UV components for the specified face in proper
+// "construction" order.
+//
+// See < http://www.ewertb.com/maya/mel/mel_a55.html >
+//
+// Constraints:
+//
+// Parameters: string $face: The face component for which to retrieve the UVs.
+//
+// Return: (string[]) The UV components associated with the specified face.
+//
+//===========================================================================
+proc string[] getUVsInOrder( string $face )
+{
+ string $uvOrder[];
+
+ string $vtxFace[] = `polyListComponentConversion -ff -tvf $face`;
+ $vtxFace = `filterExpand -sm 70 -ex true $vtxFace`;
+
+ for ( $vf in $vtxFace )
+ {
+ string $uv[] = `polyListComponentConversion -fvf -tuv $vf`;
+ $uvOrder[`size $uvOrder`] = $uv[0];
+ }
+
+ return $uvOrder;
+}
+
+//===========================================================================
+// getFaceEdges
+//===========================================================================
+// Description: Returns the edge components that construct the specified face.
+//
+// Constraints:
+//
+// Parameters: string $face: The face for which to retrieve the edges.
+//
+// Return: (string[]): The edge components.
+//
+//===========================================================================
+proc string[] getFaceEdges( string $face )
+{
+ string $edges[] = `polyListComponentConversion -ff -te $face`;
+ $edges = `filterExpand -sm 32 -ex true $edges`;
+
+ return $edges;
+}
+
+//===========================================================================
+// performSpinUVz
+//===========================================================================
+// Description: Invoked when the user presses the "Spin UVz" button.
+// Spins the UVs.
+//
+// Constraints: If at least one polymesh face component is not selected
+// then no action is taken.
+//
+// The "Auto Map Cut" option is always immediately turned off.
+// It is only necessary to cut the edges once for a particular
+// face, and the Construction History stack will be inflated
+// with unnecessary 'polyMapCut' operations if not. Eventually
+// I may determine a way to detect if an auto-cut is necessary
+// and just skip the step when applicable.
+//
+// Parameters: (none)
+//
+// Return: (none)
+//
+//===========================================================================
+global proc performSpinUVz()
+{
+ string $faces[] = `filterExpand -sm 34 -ex true`;
+
+ if ( `size $faces` > 0 )
+ {
+ string $select[] = `ls -sl`;
+
+ int $reverse = `checkBox -q -value rad_uvzReverse`;
+ int $autoCut = `checkBox -q -value rad_uvzAutoCut`;
+
+ for ( $face in $faces )
+ {
+ if ( $autoCut )
+ {
+ // Only need to cut edges if any of the vertices
+ string $edges[] = getFaceEdges( $face );
+ polyMapCut $edges;
+ }
+
+ string $uvOrder[] = getUVsInOrder( $face );
+ print $uvOrder;
+ print "------\n";
+ int $numUVs = `size $uvOrder`;
+ float $uv[];
+ float $u[], $v[];
+
+ for ( $i = 0; $i < $numUVs; $i++ )
+ {
+ $uv = `polyEditUV -q $uvOrder[$i]`;
+ $u[`size $u`] = $uv[0];
+ $v[`size $v`] = $uv[1];
+ }
+
+ for ( $i = 0; $i < $numUVs; $i++ )
+ {
+ int $next;
+
+ if ( $reverse )
+ {
+ $next = ( $i + ( $numUVs - 1 ) ) % $numUVs;
+ }
+ else
+ {
+ $next = ( $i + 1 ) % $numUVs;
+ }
+
+ polyEditUV -r false -u $u[$next] -v $v[$next] $uvOrder[$i];
+ }
+ }
+
+ checkBox -e -value off rad_uvzAutoCut;
+
+ select -r $select;
+ }
+ else
+ {
+ warning( "UVz: No action taken -- Please select one or more faces." );
+ }
+}
+
+//===========================================================================
+// uvz
+//===========================================================================
+// Description: Generates the UI for this script.
+//
+// Constraints:
+//
+// Parameters: (none)
+//
+// Return: (none)
+//
+//===========================================================================
+global proc uvz()
+{
+ if ( `window -exists raduvz` )
+ deleteUI -window raduvz;
+
+ window -title "UVz" -iconName "UVz" raduvz;
+
+ columnLayout -adjustableColumn true;
+
+ string $spinFrame = `frameLayout -label "Spin UVz on Face"`;
+
+ string $spinForm = `formLayout`;
+
+ string $spinReverse = `checkBox -label "Reverse Spin" rad_uvzReverse`;
+ string $spinAutoCut = `checkBox -label "Auto Map Cut" rad_uvzAutoCut`;
+ string $spinUVz = `button -label "Spin UVz"`;
+
+ setParent ..;
+
+ setParent ..;
+
+ setParent ..;
+
+ setParent ..;
+
+ formLayout -e
+
+ -af $spinReverse "top" 4
+ -af $spinReverse "left" 4
+
+ -ac $spinAutoCut "top" 4 $spinReverse
+ -af $spinAutoCut "left" 4
+
+ -ac $spinUVz "top" 4 $spinAutoCut
+ -af $spinUVz "left" 4
+ -af $spinUVz "right" 4
+ -af $spinUVz "bottom" 2
+
+ $spinForm;
+
+ // Attach command callbacks
+ button -e
+ -c performSpinUVz
+ $spinUVz;
+
+ showWindow raduvz;
+}
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/yuya_copyFileTex.mel b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/yuya_copyFileTex.mel
new file mode 100644
index 0000000..7c018f9
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/yuya_copyFileTex.mel
@@ -0,0 +1,172 @@
+//
+// Copy File Textures Ver.1.51
+//
+// Created by Yuya Sugiyama < yuya@sb.sakura.ne.jp >
+// Last Modify : 16th/December/2001
+// Please check my web site -INVISIBLE-.
+// URL : http://sb.sakura.ne.jp/~yuya/
+//
+// Description:
+// This script copies file textures in current scene to current sourceimages
+// directory. This script makes your file management easier.
+//
+// Usage:
+// Type
+//
+// yuya_copyFileTex;
+//
+// Then appear the window. Set options and hit "Copy File Textures" button.
+// Using specify directory option, path must be terminated in "\"(backslash).
+// (If you use browse button, unnecessary paying attention to this limitation.)
+//
+// Please use (and modify) this at your own lisk.
+//
+
+
+// Start window procedure
+
+global proc yuya_copyFileTex () {
+
+if ((`window -ex yuya_copyFileTex`) == true) deleteUI yuya_copyFileTex;
+window -t "Copy File Texture" -w 420 -h 100 yuya_copyFileTex;
+columnLayout -adj 1;
+
+frameLayout -l "Copy File Texture" -la "center" -bs "etchedIn" -cll 1 -cl 0;
+
+columnLayout -adj 1;
+radioButtonGrp -w 330 -cw3 140 100 100 -nrb 2 -label "Which Files?" -la2 "All Files" "Selected Files" -select 1 yuya_allOrSel;
+
+columnLayout -adj 1;
+radioButtonGrp -w 330 -cw3 140 100 100 -nrb 2 -label "Mofify Texture Node?" -la2 "Yes" "No" -select 1 yuya_modTexNode;
+
+checkBoxGrp -l "Specify Directory"
+ -onCommand
+ "textFieldGrp -e -ed true yuya_cftDirField;
+ symbolButton -e -enable true yuya_cftBrowseButton;"
+ -offCommand
+ "textFieldGrp -e -ed false yuya_cftDirField;
+ symbolButton -e -enable false yuya_cftBrowseButton;"
+ yuya_cftCB;
+
+rowLayout -w 330 -nc 2 -cw2 380 40 -cal 1 "right" yuya_cftDirNameLayout;
+textFieldGrp -l "Directory" -ed false -w 375 yuya_cftDirField;
+symbolButton
+ -enable false
+ -image "navButtonBrowse.xpm"
+ -c "yuya_getDirProc" yuya_cftBrowseButton;
+
+setParent..;
+setParent..;
+setParent..;
+setParent..;
+
+button -l "Copy File Textures." -c "yuya_copyFileTexMain (`radioButtonGrp -q -select yuya_allOrSel`) (`radioButtonGrp -q -select yuya_modTexNode`)";
+
+showWindow;
+
+}
+
+// End create window procedure
+
+
+// Start copy file textures procedure
+
+global proc int yuya_copyFileTexMain ( int $allOrSel, int $modTexNode ) {
+
+if ( $allOrSel == 1 ) {
+ select -all;
+}
+
+string $path[] = `ls -sl -type file`;
+select -cl;
+
+if ( $allOrSel == 2 ) {
+ select -add $path;
+}
+
+string $copyPath;
+
+if (`checkBoxGrp -q -value1 yuya_cftCB`){
+
+ $copyPath = `textFieldGrp -q -fileName yuya_cftDirField`;
+
+}else{
+ $copyPath =`workspace -q -rd`+"sourceimages/";
+ for ($i=1; $i<=17; $i++){
+ $copyPath = `substitute "/" $copyPath "\\"`;
+ }
+}
+
+string $batchName = `file -q -sceneName`;
+
+if( `size($batchName)` ){
+ string $tokBatName[];
+ int $numTokenB = `tokenize $batchName "/" $tokBatName`;
+ $batchName = $tokBatName[$numTokenB-1] +".bat";
+ $batchName = `substitute ".ma" $batchName ""`;
+ $batchName = `substitute ".mb" $batchName ""`;
+
+}else{
+ $batchName = "untitled.bat";
+}
+
+system ("echo on>"+$copyPath+"copyFileTex_"+$batchName);
+
+string $current;
+for ( $current in $path ) {
+
+ string $currentFullPath = `getAttr ($current + ".ftn")`;
+
+ string $tokFileName[];
+ int $numToken = `tokenize $currentFullPath "/" $tokFileName`;
+ string $fileName = $tokFileName[$numToken-1];
+
+ for ($i=1; $i<=17; $i++){
+ $currentFullPath = `substitute "/" $currentFullPath "\\"`;
+ }
+
+ system ("echo copy \""+$currentFullPath+"\" \""+$copyPath+"\">>\""+$copyPath+"copyFileTex_"+$batchName+"\"");
+
+
+}
+
+system ("echo del \""+$copyPath+"copyFileTex_"+$batchName+"\">>\""+$copyPath+"copyFileTex_"+$batchName+"\"");
+system ("start \""+$copyPath+"copyFileTex_"+$batchName+"\"");
+
+if ($modTexNode == 1){
+
+ for ( $current in $path ) {
+
+ string $currentFullPath = `getAttr ($current + ".ftn")`;
+
+ string $tokFileName[];
+ int $numToken = `tokenize $currentFullPath "/" $tokFileName`;
+ string $fileName = $tokFileName[$numToken-1];
+
+ setAttr ( $current + ".ftn" ) -type "string" ($copyPath+$fileName);
+
+ }
+
+}
+
+return 1;
+
+}
+
+// End copy file textures procedure
+
+
+// Get Directory Name
+
+global proc yuya_getDirProc(){
+
+fileBrowser "yuya_getDirNameProc" "Select Directory" "directory" 4;
+
+}
+
+global proc yuya_getDirNameProc(string $dir, string $type){
+
+textFieldGrp -e -fileName ($dir+"\\") yuya_cftDirField;
+
+}
+
diff --git a/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/yuya_copyFileTex.xpm b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/yuya_copyFileTex.xpm
new file mode 100644
index 0000000..ef06b32
--- /dev/null
+++ b/tools/MayaTools/Maya4.0/scripts/SimpsonsArt/yuya_copyFileTex.xpm
@@ -0,0 +1,198 @@
+/* XPM */
+static char *FILE_xpm[]={
+"32 32 163 2",
+" c #C1C1C1",
+" 0 c #9C9C00",
+" 1 c #FFFF9C",
+" 2 c #9D9C01",
+" 3 c #9F9D04",
+" 4 c #A29F0A",
+" 5 c #A6A111",
+" 6 c #ABA317",
+" 7 c #AFA61E",
+" 8 c #FFFE9C",
+" 9 c #FFFC9C",
+" a c #FFF79C",
+" b c #FFF29C",
+" c c #FFED9C",
+" d c #F9E095",
+" e c #A69720",
+" f c #000000",
+" g c #FFFFFF",
+" h c #FFE79C",
+" i c #EDCC86",
+" j c #8F7717",
+" k c #FFFD9C",
+" l c #FFF39C",
+" m c #FFE89C",
+" n c #FFE29C",
+" o c #E6C07E",
+" p c #836614",
+" q c #FFF89C",
+" r c #FFE39C",
+" s c #FFDE9C",
+" t c #E6BC7E",
+" u c #856615",
+" v c #FFFB9C",
+" w c #FFEE9C",
+" x c #FFDA9C",
+" y c #E6BA7E",
+" z c #866817",
+" A c #FFD69C",
+" B c #8D8700",
+" C c #6E5D00",
+" D c #FFE99C",
+" E c #9E9D03",
+" F c #F0E7A5",
+" G c #F0E3A5",
+" H c #D0A99C",
+" I c #945866",
+" J c #C0AC92",
+" K c #E6DD7E",
+" L c #B49840",
+" M c #9F9E06",
+" N c #D1C8A8",
+" O c #BC0000",
+" P c #DD0000",
+" Q c #E00305",
+" R c #CF7777",
+" S c #A3A33A",
+" T c #E5E59B",
+" U c #A29F09",
+" V c #A5A10F",
+" W c #A9A315",
+" X c #A9A072",
+" Y c #572323",
+" Z c #E20507",
+" & c #D26364",
+"0 c #E6E6AB",
+"00 c #652425",
+"01 c #D50609",
+"02 c #E40607",
+"03 c #D65151",
+"04 c #EDE6A2",
+"05 c #F4F4A3",
+"06 c #B7B3B3",
+"07 c #591212",
+"08 c #BD0304",
+"09 c #FFF59C",
+"0a c #BDBBBB",
+"0b c #6B1313",
+"0c c #D5080A",
+"0d c #DB4A44",
+"0e c #EDE686",
+"0f c #C7B257",
+"0g c #B8964B",
+"0h c #B49740",
+"0i c #B49640",
+"0j c #B49540",
+"0k c #B49440",
+"0l c #C7AB57",
+"0m c #EDDC86",
+"0n c #A4A429",
+"0o c #D81511",
+"0p c #E10A09",
+"0q c #E45F48",
+"0r c #E3362A",
+"0s c #E7090A",
+"0t c #E6DC7E",
+"0u c #E6DB7E",
+"0v c #E6D97E",
+"0w c #E6D87E",
+"0x c #E6D67E",
+"0y c #E6D47E",
+"0z c #F9EA95",
+"0A c #FFF09C",
+"0B c #AAA23E",
+"0C c #B57C67",
+"0D c #BE0706",
+"0E c #E5090B",
+"0F c #FEFD9C",
+"0G c #FFFA9C",
+"0H c #FFF19C",
+"0I c #FFEF9C",
+"0J c #B40D04",
+"0K c #D50508",
+"0L c #E20608",
+"0M c #F2D892",
+"0N c #FFF99C",
+"0O c #FFF69C",
+"0P c #FFF49C",
+"0Q c #FFEA9C",
+"0R c #BBB9B9",
+"0S c #652324",
+"0T c #5A1614",
+"0U c #773E2B",
+"0V c #B60304",
+"0W c #D60A0B",
+"0X c #E8090B",
+"0Y c #E8966D",
+"0Z c #FFEC9C",
+"0& c #AAAA49",
+"1 c #B8AF9D",
+"10 c #825757",
+"11 c #86523D",
+"12 c #822617",
+"13 c #994D30",
+"14 c #D0281C",
+"15 c #E5080A",
+"16 c #DA5D52",
+"17 c #E9E5A9",
+"18 c #FFEB9C",
+"19 c #FFE59C",
+"1a c #E5E5AB",
+"1b c #BBAB90",
+"1c c #946543",
+"1d c #903E27",
+"1e c #973536",
+"1f c #E9E4A9",
+"1g c #FFE49C",
+"1h c #E4E2AC",
+"1i c #E4E1AC",
+"1j c #E4E0AC",
+"1k c #AE9278",
+"1l c #E9E2A9",
+"1m c #FFE69C",
+"1n c #FFE09C",
+"1o c #FFE19C",
+"1p c #FFDF9C",
+"1q c #FFDD9C",
+"1r c #FFDB9C",
+"1s c #FFDC9C",
+"1t c #FFD89C",
+"1u c #FFD99C",
+"1v c #FFD79C",
+"1w c #FFD59C",
+"1x c #FFD49C",
+" ",
+" 0 0 0 ",
+" 0 0 0 1 0 0 0 ",
+" 0 0 1 1 1 1 1 0 2 3 4 5 6 7 ",
+" 0 1 1 1 1 1 1 8 9 a b c d e f f f g g g f f f g g g ",
+" 0 1 1 1 1 1 8 9 a b c h i j f f f g g g f f f g g g ",
+" 0 1 1 1 1 k 9 a l c m n o p f f f g g g f f f g g g ",
+" 0 1 1 1 k 9 q l c m r s t u g g g f f f g g g f f f ",
+" 0 1 1 k v q l w m r s x y z g g g f f f g g g f f f ",
+" 0 8 k v q l w m r s x A B C g g g f f f g g g f f f ",
+" 2 k v q l w D r s 0 0 0 B C f f f g g g f f f g g g ",
+" E v q F G H I J 0 0 1 1 K L f f f g g g f f f g g g ",
+" M q l N O P Q R S T 1 1 K L f f f g g g f f f g g g ",
+" U V W X Y O Q Z &0 1 1 K L g g g f f f g g g f f f 0 0 ",
+" 0001 Z02030405 K L g g g f f f g g g f f f a 0 ",
+" 06070802020304 K L g g g f f f g g g f f f09 0 ",
+" 0a0b0c02020d0e0f0g L L L L0h0h0i0j0k0l0m b 0 ",
+" 0n0b0o020p0q0r0s K K0t0u0u0v0w0x0y0m0z0A 0 ",
+" 0B0C0D02 Z0E0s0s0F 8 k v0G q a09 l0H0I c 0 ",
+" 0J0K020L Z0s0s0s0M 9 v0N q0O0P l0H0I c0Q 0 ",
+" 0R0S0T0U0V0W0s0X0s0Y v0N q0O0P b0A w0Z0Q m 0 ",
+" 0&1 1011121314151617 a09 l b0I w18 D h19 0 ",
+" 01a1a1a1b101c1d1e1f09 l0H0I c18 D h1g n 0 ",
+" 0 1 8 k1h1i1j1f1k1l b0A w0Z0Q m1m1g n1n 0 ",
+" 0 8 k 90G0N a0O0P b0A w0Z0Q m19 r1o1p1q 0 ",
+" 0 k 90G q a09 l0H0I c18 D h19 r1o1p1q1r 0 ",
+" 0 v0G q0O09 l0H0I c18 D1m1g n1n s1s x1t 0 ",
+" 00N q0O0P b0A w0Z0Q m1m1g n1p s1r x1t A 0 ",
+" 0 a090P b0A w0Z D h19 r1o1p1q1r1u1v1w1x 0 ",
+" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ",
+" ",
+" "};