Facemotion_MayaScript_sampl.../FACEMOTION3D_to_Maya.mel
2024-10-01 19:56:57 +08:00

1184 lines
47 KiB
Plaintext

//copyright Yasushi Emoto
//version1.04 2024-08-22
global proc FACEMOTION3D_addNewShelfTab()
{
global string $gShelfTopLevel;
string $Install_shelfName = "FACEMOTION3D";
int $Install_shelfExists = `layout -q -ex $Install_shelfName`;
if ($Install_shelfExists == 0)
{
addNewShelfTab $Install_shelfName;
}
shelfTabLayout -e -selectTab $Install_shelfName $gShelfTopLevel;
}
global proc FACEMOTION3D_addNewShelfButton()
{
string $FACEMOTION3D_allString = "global string $FACEMOTION3D_combinedString = \"\";\n\
global int $FACEMOTION3D_bakeAnimationFlag = 0;\n\
global int $FACEMOTION3D_loopCount = 0;\n\
global float $FACEMOTION3D_startTime = 0.0;\n\
global float $FACEMOTION3D_nowTime = 0.0;\n\
global float $FACEMOTION3D_preTime = 0.0;\n\
global int $FACEMOTION3D_nowFrame = 0;\n\
global int $FACEMOTION3D_preFrame = -1000;\n\
global float $FACEMOTION3D_currentfpsReciprocal = 24.0;\n\
global int $FACEMOTION3D_Maya2022BugStatus = 0;\n\
global string $FACEMOTION3D_compressAlgorithm = \"zlib_\";\n\
global float $FACEMOTION3D_StrengthOfBlendShapes = 1.0;\n\
\n\
\n\
global proc FACEMOTION3D_compressAlgorithmCheck()\n\
{\n\
global string $FACEMOTION3D_compressAlgorithm;\n\
string $maya_version = `about -v`;\n\
int $maya_versionInt = 2020;\n\
catchQuiet($maya_versionInt = (int)$maya_version);\n\
if($maya_versionInt > 2020)\n\
{\n\
$FACEMOTION3D_compressAlgorithm = \"lzma_\";\n\
}\n\
else\n\
{\n\
$FACEMOTION3D_compressAlgorithm = \"zlib_\";\n\
}\n\
}\n\
\n\
global proc FACEMOTION3D_Maya2022BugStatusCheck()\n\
{\n\
global int $FACEMOTION3D_Maya2022BugStatus;\n\
\n\
string $maya_version = `about -v`;\n\
int $maya_version_num = 2020;\n\
int $isdecimal = python(\"u'\"+$maya_version+\"'.isdecimal()\");\n\
if($isdecimal == 1)\n\
{\n\
$maya_version_num = int($maya_version);\n\
}\n\
\n\
if($maya_version_num >= \2022\)\n\
{\n\
if($FACEMOTION3D_Maya2022BugStatus == 0)\n\
{\n\
string $PORT_NUM = \":44444\";\n\
catchQuiet(`commandPort -n $PORT_NUM`);\n\
catchQuiet(`commandPort -cl -n $PORT_NUM`);\n\
if(catchQuiet(`commandPort -n $PORT_NUM`))\n\
{\n\
$FACEMOTION3D_Maya2022BugStatus = 1;\n\
}\n\
else\n\
{\n\
catchQuiet(`commandPort -cl -n $PORT_NUM`);\n\
}\n\
}\n\
}\n\
}\n\
\n\
global proc FACEMOTION3D_setAttrBlendShape(string $attr,float $value)\n\
{\n\
global int $FACEMOTION3D_nowFrame;\n\
global int $FACEMOTION3D_bakeAnimationFlag;\n\
global int $FACEMOTION3D_loopCount;\n\
global float $FACEMOTION3D_StrengthOfBlendShapes;\n\
if(`objExists $attr`)\n\
{\n\
if($FACEMOTION3D_bakeAnimationFlag == 1)\n\
{\n\
if( $FACEMOTION3D_loopCount == 0 || $FACEMOTION3D_nowFrame != -1 )\n\
{\n\
setKeyframe -t $FACEMOTION3D_nowFrame -v($value*$FACEMOTION3D_StrengthOfBlendShapes) $attr;\n\
}\n\
}\n\
else\n\
{\n\
setAttr $attr ($value*$FACEMOTION3D_StrengthOfBlendShapes);\n\
}\n\
}\n\
}\n\
global proc FACEMOTION3D_setAttrObjectAtributeThree(string $objName,string $attr,float $value1,float $value2,float $value3)\n\
{\n\
global int $FACEMOTION3D_nowFrame;\n\
global int $FACEMOTION3D_bakeAnimationFlag;\n\
global int $FACEMOTION3D_loopCount;\n\
string $objAttr = $objName+\".\"+$attr;\n\
\n\
if(`objExists $objAttr`)\n\
{\n\
if($FACEMOTION3D_bakeAnimationFlag == 1)\n\
{\n\
if($FACEMOTION3D_loopCount == 0 || $FACEMOTION3D_nowFrame != -1)\n\
{\n\
setKeyframe -t $FACEMOTION3D_nowFrame -v $value1 ($objAttr+\"X\");\n\
setKeyframe -t $FACEMOTION3D_nowFrame -v $value2 ($objAttr+\"Y\");\n\
setKeyframe -t $FACEMOTION3D_nowFrame -v $value3 ($objAttr+\"Z\");\n\
}\n\
}\n\
else\n\
{\n\
setAttr $objAttr $value1 $value2 $value3;\n\
}\n\
}\n\
}\n\
\n\
global proc FACEMOTION3D_getNowFrame(float $n,float $p,int $s)\n\
{\n\
global int $FACEMOTION3D_nowFrame;\n\
global int $FACEMOTION3D_preFrame;\n\
global float $FACEMOTION3D_currentfpsReciprocal;\n\
int $n_FACEMOTION3D_currentfpsReciprocal = int($n/$FACEMOTION3D_currentfpsReciprocal);\n\
\n\
if($n_FACEMOTION3D_currentfpsReciprocal != int($p/$FACEMOTION3D_currentfpsReciprocal))\n\
{\n\
$FACEMOTION3D_nowFrame = $s + $n_FACEMOTION3D_currentfpsReciprocal;\n\
}\n\
else\n\
{\n\
$FACEMOTION3D_nowFrame = -1;\n\
}\n\
}\n\
\n\
global proc FACEMOTION3D_ExecString(string $recievedString)\n\
{\n\
global string $FACEMOTION3D_combinedString;\n\
global int $FACEMOTION3D_bakeAnimationFlag;\n\
global int $FACEMOTION3D_loopCount;\n\
global float $FACEMOTION3D_startTime;\n\
global float $FACEMOTION3D_nowTime;\n\
global float $FACEMOTION3D_preTime;\n\
\n\
$FACEMOTION3D_combinedString += $recievedString;\n\
string $splited[] = python(\"r'\"+$FACEMOTION3D_combinedString+\"'.split('___FACEMOTION3D')\");\n\
int $splited_len = `size($splited)`;\n\
if($splited_len!=1)\n\
{\n\
int $counter = 0;\n\
for($n in $splited)\n\
{\n\
$FACEMOTION3D_combinedString = $n;\n\
$counter += 1;\n\
if($counter < $splited_len)\n\
{\n\
if($FACEMOTION3D_bakeAnimationFlag == 1)\n\
{\n\
float $time = python(\"import time;time.time()\");\n\
if($FACEMOTION3D_loopCount == 0)\n\
{\n\
$FACEMOTION3D_startTime = $time;\n\
$FACEMOTION3D_nowTime = 0.0;\n\
}\n\
else\n\
{\n\
$FACEMOTION3D_preTime = $FACEMOTION3D_nowTime;\n\
$FACEMOTION3D_nowTime = $time - $FACEMOTION3D_startTime;\n\
}\n\
FACEMOTION3D_getNowFrame($FACEMOTION3D_nowTime,$FACEMOTION3D_preTime,0);\n\
}\n\
\n\
if(!`gmatch $FACEMOTION3D_combinedString \"*python(*\"` && !`gmatch $FACEMOTION3D_combinedString \"*sysFile*\"`)\n\
catchQuiet(eval($FACEMOTION3D_combinedString));\n\
\n\
$FACEMOTION3D_combinedString = \"\";\n\
$FACEMOTION3D_loopCount+=1;\n\
}\n\
}\n\
}\n\
}\n\
\n\
\n\
global proc compressedHexStringToDecompressedAudioData(string $hexString,string $audioFileFullPath)\n\
{\n\
global string $FACEMOTION3D_compressAlgorithm;\n\
\n\
if($FACEMOTION3D_compressAlgorithm == \"zlib_\")\n\
{\n\
catchQuiet(`python(\"import zlib;bytes_data='\"+$hexString+\"'.decode('hex');bytes_data_decompressed = zlib.decompress(bytes_data,-15);wf = open('\"+$audioFileFullPath+\"', 'wb');wf.write(bytes_data_decompressed);\")`);\n\
}\n\
else if($FACEMOTION3D_compressAlgorithm == \"lzma_\")\n\
{\n\
catchQuiet(`python(\"import lzma;bytes_data= bytes.fromhex('\"+$hexString+\"');bytes_data_decompressed = lzma.decompress(bytes_data);wf = open('\"+$audioFileFullPath+\"', 'wb');wf.write(bytes_data_decompressed);\")`);\n\
}\n\
}\n\
\n\
global proc string compressedHexStringToDecompressedString(string $hexString)\n\
{\n\
global string $FACEMOTION3D_compressAlgorithm;\n\
\n\
string $returnString = $hexString;\n\
\n\
if($FACEMOTION3D_compressAlgorithm == \"zlib_\")\n\
{\n\
catchQuiet($returnString = `python(\"import zlib;bm=r'\"+$returnString+\"'.decode('hex');bmm = zlib.decompress(bm,-15);bmm.decode('utf-8')\")`);\n\
}\n\
else if($FACEMOTION3D_compressAlgorithm == \"lzma_\")\n\
{\n\
catchQuiet($returnString = `python(\"import lzma;bm = bytes.fromhex(r'\"+$returnString+\"');bmm = lzma.decompress(bm); bmm.decode('utf-8')\")`);\n\
}\n\
return $returnString;\n\
}\n\
\n\
global proc FACEMOTION3D_bakeRecordedAnimation(string $recievedString)\n\
{\n\
global string $FACEMOTION3D_combinedString;\n\
global int $FACEMOTION3D_loopCount;\n\
global float $FACEMOTION3D_startTime;\n\
global float $FACEMOTION3D_nowTime;\n\
global float $FACEMOTION3D_preTime;\n\
global int $FACEMOTION3D_nowFrame;\n\
\n\
\n\
$FACEMOTION3D_combinedString += $recievedString;\n\
int $fm_count = 0;\n\
catchQuiet($fm_count = `python(\"r'\"+$FACEMOTION3D_combinedString+\"'.count('___FACEMOTION3D')\")`);\n\
if($fm_count >= 1)\n\
{\n\
$FACEMOTION3D_combinedString = python(\"r'\"+$FACEMOTION3D_combinedString+\"'.replace('___FACEMOTION3D','')\");\n\
\n\
if(!`gmatch $FACEMOTION3D_combinedString \"*python(*\"` && !`gmatch $FACEMOTION3D_combinedString \"*sysFile*\"` && !`gmatch $FACEMOTION3D_combinedString \"*system*\"`)\n\
{\n\
if($FACEMOTION3D_combinedString == \"noRecordedData\")\n\
{\n\
confirmDialog -title \"There is no recorded data\" -message \"Please execute after recording the animation on the iOS application side.\"\n\
-button \"OK\" -defaultButton \"OK\";\n\
}\n\
else\n\
{\n\
string $sendMessage = \"NowBakingMaya_FACEMOTION3D\";\n\
string $iosipAddress = `textField -q -text \"FACEMOTION3D_iosipAddressTextField\"`;\n\
FACEMOTION3D_sendMessageToiOS($sendMessage);\n\
\n\
string $bakeStartFrameString = `textField -q -text FACEMOTION3D_bakeStartFrame`;\n\
int $bakeStartFrame = int($bakeStartFrameString);\n\
int $bakeAudioStartFrame = $bakeStartFrame + 5;\n\
\n\
int $recieveAudioCheckBoxValue = `checkBox -q -v recieveAudioCheckBox`;\n\
string $splitedString[];\n\
float $bakeRecordTimeList[];\n\
string $audioFileFullPath = \"\";\n\
if($recieveAudioCheckBoxValue == 1)\n\
{\n\
$splitedString = python(\"r'\"+$FACEMOTION3D_combinedString+\"'.split('===')\");\n\
$FACEMOTION3D_combinedString = compressedHexStringToDecompressedString($splitedString[0]);\n\
$splitedString[0] = \"\";\n\
\n\
string $dirPathTextFieldValue = `textField -q -text FACEMOTION3D_audioSaveFolder`;\n\
string $dirPath = fromNativePath($dirPathTextFieldValue);\n\
string $audioFileName = `textField -q -text FACEMOTION3D_audioFileName`;\n\
$audioFileFullPath = $dirPath + \"/\" + $audioFileName + \".wav\";\n\
\n\
compressedHexStringToDecompressedAudioData($splitedString[1],$audioFileFullPath);\n\
$splitedString[1] = \"\";\n\
if(`size $splitedString` > 2)\n\
{\n\
string $bakeRecordTimeListString = compressedHexStringToDecompressedString($splitedString[2]);\n\
$bakeRecordTimeList = python(\"import json;json.loads(r'\"+$bakeRecordTimeListString+\"')\");\n\
}\n\
$splitedString = {};\n\
}\n\
else\n\
{\n\
$splitedString = python(\"r'\"+$FACEMOTION3D_combinedString+\"'.split('===')\");\n\
$FACEMOTION3D_combinedString = compressedHexStringToDecompressedString($splitedString[0]);\n\
$splitedString[0] = \"\";\n\
\n\
if(`size $splitedString` > 1)\n\
{\n\
string $bakeRecordTimeListString = compressedHexStringToDecompressedString($splitedString[1]);\n\
$bakeRecordTimeList = python(\"import json;json.loads(r'\"+$bakeRecordTimeListString+\"')\");\n\
}\n\
$splitedString = {};\n\
}\n\
\n\
string $messageRecordList[] = python(\"import json;json.loads(r'\"+$FACEMOTION3D_combinedString+\"')\");\n\
$FACEMOTION3D_combinedString = \"\";\n\
\n\
int $maxCount = `size $messageRecordList`;\n\
progressWindow -title \"Now Baking...\" -progress $FACEMOTION3D_loopCount -max $maxCount;\n\
\n\
for($message in $messageRecordList)\n\
{\n\
progressWindow -edit -progress $FACEMOTION3D_loopCount;\n\
if($FACEMOTION3D_loopCount == 0)\n\
{\n\
$FACEMOTION3D_startTime = 0.0;\n\
$FACEMOTION3D_nowTime = 0.0;\n\
}\n\
else\n\
{\n\
if($FACEMOTION3D_loopCount == 0)\n\
{\n\
$FACEMOTION3D_preTime = (1.0/60.0)*($FACEMOTION3D_loopCount - 1);\n\
$FACEMOTION3D_nowTime = (1.0/60.0)*$FACEMOTION3D_loopCount;\n\
}\n\
else\n\
{\n\
$FACEMOTION3D_preTime = $bakeRecordTimeList[$FACEMOTION3D_loopCount - 1];\n\
$FACEMOTION3D_nowTime = $bakeRecordTimeList[$FACEMOTION3D_loopCount];\n\
}\n\
}\n\
\n\
FACEMOTION3D_getNowFrame($FACEMOTION3D_nowTime,$FACEMOTION3D_preTime,$bakeStartFrame);\n\
if($FACEMOTION3D_nowFrame!=-1)\n\
{\n\
catchQuiet(eval($message));\n\
}\n\
\n\
$FACEMOTION3D_loopCount+=1;\n\
}\n\
progressWindow -endProgress;\n\
\n\
if($recieveAudioCheckBoxValue == 1)\n\
{\n\
python(\"import time;time.sleep(2.5);\");\n\
catchQuiet(doSoundImportArgList (\"1\", {$audioFileFullPath,string($bakeAudioStartFrame)}));\n\
}\n\
$sendMessage = \"BakeFinishMaya_FACEMOTION3D\";\n\
FACEMOTION3D_sendMessageToiOS($sendMessage);\n\
\n\
confirmDialog -title \"Bake Complete!\" -message \"The animation bake is complete.\"\n\
-button \"OK\" -defaultButton \"OK\";\n\
}\n\
}\n\
FACEMOTION3D_wait_bakeRecordedAnimationClose();\n\
}\n\
}\n\
\n\
global proc FACEMOTION3D_wait_connectionTapped()\n\
{\n\
select -cl;\n\
string $buttonLabel = `button -q -label \"FACEMOTION3D_waitConnectionButton\"`;\n\
if($buttonLabel==\"Stream Live\")\n\
{\n\
button -edit -label \"Disconnect stream\" \"FACEMOTION3D_waitConnectionButton\";\n\
FACEMOTION3D_wait_connection();\n\
}\n\
else if($buttonLabel==\"Disconnect stream\")\n\
{\n\
button -edit -label \"Stream Live\" \"FACEMOTION3D_waitConnectionButton\";\n\
FACEMOTION3D_disconnect();\n\
}\n\
}\n\
global proc FACEMOTION3D_wait_connection()\n\
{\n\
global string $FACEMOTION3D_combinedString;\n\
global int $FACEMOTION3D_bakeAnimationFlag;\n\
global int $FACEMOTION3D_loopCount;\n\
global float $FACEMOTION3D_startTime;\n\
global float $FACEMOTION3D_nowTime;\n\
global float $FACEMOTION3D_preTime;\n\
global int $FACEMOTION3D_preFrame;\n\
$FACEMOTION3D_combinedString = \"\";\n\
$FACEMOTION3D_bakeAnimationFlag = 0;\n\
$FACEMOTION3D_loopCount = 0;\n\
$FACEMOTION3D_startTime = 0.0;\n\
$FACEMOTION3D_nowTime = 0.0;\n\
$FACEMOTION3D_preTime = 0.0;\n\
$FACEMOTION3D_preFrame = -1000;\n\
global int $FACEMOTION3D_Maya2022BugStatus;\n\
\n\
int $autoConnectCheckBoxValue = `checkBox -q -v autoConnectCheckBox`;\n\
optionVar -sv \"autoConnectCheckBoxValue\" $autoConnectCheckBoxValue;\n\
\n\
string $localipAddress = `textField -q -text \"FACEMOTION3D_localipAddressTextField\"`;\n\
$localipAddress = python(\"r'\"+$localipAddress+\"'.replace(' ','')\");\n\
\n\
optionVar -sv \"FACEMOTION3D_localipAddressTextField\" $localipAddress;\n\
\n\
string $iosipAddress = `textField -q -text \"FACEMOTION3D_iosipAddressTextField\"`;\n\
$iosipAddress = python(\"r'\"+$iosipAddress+\"'.replace(' ','')\");\n\
\n\
optionVar -sv \"FACEMOTION3D_iosipAddressTextField\" $iosipAddress;\n\
\n\
string $sendMessage = \"MayaDirectRecieve_FACEMOTION3Dpayea\";\n\
\n\
string $streamPort = `textField -q -text \"FACEMOTION3D_streamPortTextField\"`;\n\
string $PORT_NUM = $localipAddress+\":\"+$streamPort;\n\
if(`commandPort -q $PORT_NUM`)\n\
{\n\
if($FACEMOTION3D_Maya2022BugStatus == 0)\n\
{\n\
commandPort -cl -n $PORT_NUM;\n\
}\n\
\n\
commandPort -pre \"FACEMOTION3D_ExecString\" -bufferSize 8192 -n $PORT_NUM;\n\
if($autoConnectCheckBoxValue == 1)\n\
{\n\
FACEMOTION3D_sendMessageToiOS($sendMessage);\n\
}\n\
}\n\
else\n\
{\n\
if(catchQuiet(`commandPort -pre \"FACEMOTION3D_ExecString\" -bufferSize 8192 -n $PORT_NUM`))\n\
{\n\
confirmDialog -title \"FACEMOTION3D warning\" -message \"Please execute after disconnecting FACEMOTION3D on other window\"\n\
-button \"OK\" -defaultButton \"OK\";\n\
}\n\
else\n\
{\n\
if($autoConnectCheckBoxValue == 1)\n\
{\n\
FACEMOTION3D_sendMessageToiOS($sendMessage);\n\
}\n\
}\n\
}\n\
}\n\
\n\
global proc FACEMOTION3D_wait_bakeRecordedAnimationClose()\n\
{\n\
global int $FACEMOTION3D_Maya2022BugStatus;\n\
string $localipAddress = `textField -q -text \"FACEMOTION3D_localipAddressTextField\"`;\n\
$localipAddress = python(\"r'\"+$localipAddress+\"'.replace(' ','')\");\n\
\n\
string $bakePort = `textField -q -text \"FACEMOTION3D_bakePortTextField\"`;\n\
string $PORT_NUM = $localipAddress+\":\"+$bakePort;\n\
if(`commandPort -q $PORT_NUM`)\n\
{\n\
if($FACEMOTION3D_Maya2022BugStatus == 0)\n\
{\n\
commandPort -cl -n $PORT_NUM;\n\
}\n\
}\n\
}\n\
\n\
global proc FACEMOTION3D_wait_bakeRecordedAnimationPreSettings()\n\
{\n\
string $audioFileFullPath = \"\";\n\
\n\
int $recieveAudioCheckBoxValue = `checkBox -q -v recieveAudioCheckBox`;\n\
if($recieveAudioCheckBoxValue == 1)\n\
{\n\
string $dirPathTextFieldValue = `textField -q -text FACEMOTION3D_audioSaveFolder`;\n\
string $dirPath = fromNativePath($dirPathTextFieldValue);\n\
string $audioFileName = `textField -q -text FACEMOTION3D_audioFileName`;\n\
$audioFileFullPath = $dirPath + \"/\" + $audioFileName + \".wav\";\n\
\n\
int $fileExists = python(\"import os;os.path.exists('\"+$audioFileFullPath+\"')\");\n\
if($fileExists == 1)\n\
{\n\
string $check = `confirmDialog -title \"Audio file already exists.\" -message \"An audio file with the same path already exists. Do you want to delete it before executing it?\" -button \"Yes\" -button \"No\" -defaultButton \"Yes\" -cancelButton \"No\" -dismissString \"No\"`;\n\
if($check == \"Yes\")\n\
{\n\
catchQuiet(`python(\"import os;os.remove('\"+$audioFileFullPath+\"')\")`);\n\
FACEMOTION3D_wait_bakeRecordedAnimation();\n\
}\n\
else if($check == \"No\")\n\
{\n\
return;\n\
}\n\
}\n\
else\n\
{\n\
FACEMOTION3D_wait_bakeRecordedAnimation();\n\
}\n\
}\n\
else\n\
{\n\
FACEMOTION3D_wait_bakeRecordedAnimation();\n\
}\n\
}\n\
\n\
global proc FACEMOTION3D_wait_bakeRecordedAnimation()\n\
{\n\
global int $FACEMOTION3D_Maya2022BugStatus;\n\
global string $FACEMOTION3D_combinedString;\n\
global int $FACEMOTION3D_bakeAnimationFlag;\n\
global int $FACEMOTION3D_loopCount;\n\
global float $FACEMOTION3D_startTime;\n\
global float $FACEMOTION3D_nowTime;\n\
global float $FACEMOTION3D_preTime;\n\
global float $FACEMOTION3D_currentfpsReciprocal;\n\
global string $FACEMOTION3D_compressAlgorithm;\n\
\n\
string $buttonLabel = `button -q -label \"FACEMOTION3D_waitConnectionButton\"`;\n\
if($buttonLabel==\"Disconnect stream\")\n\
{\n\
confirmDialog -title \"Error\" -message \"This feature is not available during streaming.\"\n\
-button \"OK\" -defaultButton \"OK\";\n\
}\n\
else\n\
{\n\
$FACEMOTION3D_combinedString = \"\";\n\
$FACEMOTION3D_bakeAnimationFlag = 1;\n\
$FACEMOTION3D_loopCount = 0;\n\
$FACEMOTION3D_startTime = 0.0;\n\
$FACEMOTION3D_nowTime = 0.0;\n\
$FACEMOTION3D_preTime = 0.0;\n\
$FACEMOTION3D_currentfpsReciprocal = 1.0/`currentTimeUnitToFPS`;\n\
\n\
FACEMOTION3D_wait_bakeRecordedAnimationClose();\n\
\n\
string $audioFolderPath = `textField -q -text FACEMOTION3D_audioSaveFolder`;\n\
optionVar -sv \"FACEMOTION3D_audioSaveFolder\" $audioFolderPath;\n\
\n\
string $localipAddress = `textField -q -text \"FACEMOTION3D_localipAddressTextField\"`;\n\
$localipAddress = python(\"r'\"+$localipAddress+\"'.replace(' ','')\");\n\
\n\
optionVar -sv \"FACEMOTION3D_localipAddressTextField\" $localipAddress;\n\
\n\
int $recieveAudioCheckBoxValue = `checkBox -q -v recieveAudioCheckBox`;\n\
optionVar -sv \"recieveAudioCheckBoxValue\" $recieveAudioCheckBoxValue;\n\
string $sendMessage = \"\";\n\
if($recieveAudioCheckBoxValue == 1)\n\
{\n\
$sendMessage = \"CorrectBake_BakeRecordedAnimationAndAudio_FACEMOTION3D\";\n\
$sendMessage = $FACEMOTION3D_compressAlgorithm + $sendMessage;\n\
\n\
int $existsFolder = python(\"import os;os.path.isdir(r'\"+$audioFolderPath+\"')\");\n\
if($existsFolder == 0)\n\
{\n\
confirmDialog -title \"The folder cannot be found.\" -message \"Please enter the correct audio folder path before executing.\"\n\
-button \"OK\" -defaultButton \"OK\";\n\
return;\n\
}\n\
\n\
string $audioFileName = `textField -q -text FACEMOTION3D_audioFileName`;\n\
optionVar -sv \"FACEMOTION3D_audioFileName\" $audioFileName;\n\
\n\
if($audioFileName == \"\")\n\
{\n\
confirmDialog -title \"Audio file name error.\" -message \"The name of the audio file is blank.\"\n\
-button \"OK\" -defaultButton \"OK\";\n\
return;\n\
}\n\
\n\
string $textFieldValue = `textField -q -text FACEMOTION3D_bakeStartFrame`;\n\
int $number_or_not = python(\"'\"+$textFieldValue+\"'.isdigit()\");\n\
if($number_or_not != 1)\n\
{\n\
textField -edit -text \"0\" FACEMOTION3D_bakeStartFrame;\n\
confirmDialog -title \"Error\" -message \"Please enter the correct 'Bake start frame'.\" -button \"OK\" -defaultButton \"OK\";\n\
return;\n\
}\n\
}\n\
else\n\
{\n\
$sendMessage = \"CorrectBake_BakeRecordedAnimation_FACEMOTION3D\";\n\
$sendMessage = $FACEMOTION3D_compressAlgorithm + $sendMessage;\n\
}\n\
\n\
string $bakePort = `textField -q -text \"FACEMOTION3D_bakePortTextField\"`;\n\
string $PORT_NUM = $localipAddress+\":\"+$bakePort;\n\
if(`commandPort -q $PORT_NUM`)\n\
{\n\
if($FACEMOTION3D_Maya2022BugStatus == 0)\n\
{\n\
commandPort -cl -n $PORT_NUM;\n\
}\n\
commandPort -pre \"FACEMOTION3D_bakeRecordedAnimation\" -n $PORT_NUM;\n\
FACEMOTION3D_sendMessageToiOS($sendMessage);\n\
}\n\
else\n\
{\n\
if(catchQuiet(`commandPort -pre \"FACEMOTION3D_bakeRecordedAnimation\" -n $PORT_NUM`))\n\
{\n\
FACEMOTION3D_sendMessageToiOS($sendMessage);\n\
}\n\
else\n\
{\n\
FACEMOTION3D_sendMessageToiOS($sendMessage);\n\
}\n\
}\n\
}\n\
}\n\
global proc FACEMOTION3D_disconnect()\n\
{\n\
global int $FACEMOTION3D_Maya2022BugStatus;\n\
string $localipAddress = `textField -q -text \"FACEMOTION3D_localipAddressTextField\"`;\n\
$localipAddress = python(\"r'\"+$localipAddress+\"'.replace(' ','')\");\n\
\n\
optionVar -sv \"FACEMOTION3D_localipAddressTextField\" $localipAddress;\n\
\n\
string $sendMessage = \"StopStreaming_FACEMOTION3D\";\n\
FACEMOTION3D_sendMessageToiOS($sendMessage);\n\
\n\
string $streamPort = `textField -q -text \"FACEMOTION3D_streamPortTextField\"`;\n\
string $PORT_NUM = $localipAddress+\":\"+$streamPort;\n\
if(`commandPort -q $PORT_NUM`)\n\
{\n\
if($FACEMOTION3D_Maya2022BugStatus == 0)\n\
{\n\
commandPort -cl -n $PORT_NUM;\n\
}\n\
}\n\
}\n\
\n\
global proc FACEMOTION3D_connectionPriorityOptionMenuChanged()\n\
{\n\
string $optionMenuValue = `optionMenu -q -v FACEMOTION3D_connectionPriorityOptionMenu`;\n\
optionVar -sv \"FACEMOTION3D_connectionPriorityOptionMenu\" $optionMenuValue;\n\
}\n\
\n\
global proc ipAddressSettingsFrameLayoutCollapsed()\n\
{\n\
optionVar -iv \"FACEMOTION3D_ipAddressSettingsFrameLayoutCollapsed\" 1;\n\
window -edit -h 131 FACEMOTION3DPanel;\n\
}\n\
global proc ipAddressSettingsFrameLayoutCollapsedExpand()\n\
{\n\
optionVar -iv \"FACEMOTION3D_ipAddressSettingsFrameLayoutCollapsed\" 0;\n\
}\n\
\n\
global proc portSettingsFrameLayoutCollapsed()\n\
{\n\
optionVar -iv \"FACEMOTION3D_portSettingsFrameLayoutCollapsed\" 1;\n\
window -edit -h 131 FACEMOTION3DPanel;\n\
} \n\
global proc portSettingsFrameLayoutCollapsedExpand()\n\
{\n\
optionVar -iv \"FACEMOTION3D_portSettingsFrameLayoutCollapsed\" 0;\n\
}\n\
\n\
global proc settingBakeAnimationFrameLayoutCollapsed()\n\
{\n\
optionVar -iv \"FACEMOTION3D_settingBakeAnimationFrameLayoutCollapsed\" 1;\n\
window -edit -h 131 FACEMOTION3DPanel;\n\
}\n\
global proc settingBakeAnimationFrameLayoutCollapsedExpand()\n\
{\n\
optionVar -iv \"FACEMOTION3D_settingBakeAnimationFrameLayoutCollapsed\" 0;\n\
}\n\
\n\
global proc settingFrameLayoutCollapsed()\n\
{\n\
optionVar -iv \"FACEMOTION3D_settingFrameLayoutCollapsed\" 1;\n\
window -edit -h 131 FACEMOTION3DPanel;\n\
}\n\
global proc settingFrameLayoutExpand()\n\
{\n\
optionVar -iv \"FACEMOTION3D_settingFrameLayoutCollapsed\" 0;\n\
}\n\
\n\
global proc FACEMOTION3D_bakeAnimationTapped()\n\
{\n\
string $buttonLabel = `button -q -label \"FACEMOTION3D_bakeAnimationButton\"`;\n\
if($buttonLabel==\"bake animation\")\n\
{\n\
button -edit -label \"stop bake animation\" \"FACEMOTION3D_bakeAnimationButton\";\n\
FACEMOTION3D_bakeAnimation();\n\
}\n\
else if($buttonLabel==\"stop bake animation\")\n\
{\n\
button -edit -label \"bake animation\" \"FACEMOTION3D_bakeAnimationButton\";\n\
FACEMOTION3D_stopBakeAnimation();\n\
}\n\
}\n\
\n\
global proc FACEMOTION3D_bakeAnimation()\n\
{\n\
global float $FACEMOTION3D_startTime;\n\
global float $FACEMOTION3D_nowTime;\n\
global float $FACEMOTION3D_preTime;\n\
global int $FACEMOTION3D_loopCount;\n\
global int $FACEMOTION3D_bakeAnimationFlag;\n\
global float $FACEMOTION3D_currentfpsReciprocal;\n\
global int $FACEMOTION3D_preFrame;\n\
\n\
$FACEMOTION3D_startTime = 0.0;\n\
$FACEMOTION3D_nowTime = 0.0;\n\
$FACEMOTION3D_preTime = 0.0;\n\
$FACEMOTION3D_loopCount = 0;\n\
$FACEMOTION3D_bakeAnimationFlag = 1;\n\
$FACEMOTION3D_currentfpsReciprocal = 1.0/`currentTimeUnitToFPS`;\n\
$FACEMOTION3D_preFrame = -1000;\n\
}\n\
\n\
global proc FACEMOTION3D_stopBakeAnimation()\n\
{\n\
global float $FACEMOTION3D_startTime;\n\
global float $FACEMOTION3D_nowTime;\n\
global float $FACEMOTION3D_preTime;\n\
global int $FACEMOTION3D_loopCount;\n\
global int $FACEMOTION3D_bakeAnimationFlag;\n\
\n\
$FACEMOTION3D_startTime = 0.0;\n\
$FACEMOTION3D_nowTime = 0.0;\n\
$FACEMOTION3D_preTime = 0.0;\n\
$FACEMOTION3D_loopCount = 0;\n\
$FACEMOTION3D_bakeAnimationFlag = 0;\n\
}\n\
\n\
global proc FACEMOTION3D_startRecording()\n\
{\n\
int $playBackStartOfRecordingCheckBoxValue = `checkBox -q -v playBackStartOfRecordingCheckBox`;\n\
optionVar -sv \"playBackStartOfRecordingCheckBoxValue\" $playBackStartOfRecordingCheckBoxValue;\n\
if($playBackStartOfRecordingCheckBoxValue == 1)\n\
{\n\
string $bakeStartFrameString = `textField -q -text FACEMOTION3D_bakeStartFrame`;\n\
int $bakeStartFrame = int($bakeStartFrameString);\n\
currentTime -edit $bakeStartFrame;\n\
}\n\
\n\
int $streamStartOfRecordingCheckBoxValue = `checkBox -q -v streamStartOfRecordingCheckBox`;\n\
optionVar -sv \"streamStartOfRecordingCheckBoxValue\" $streamStartOfRecordingCheckBoxValue;\n\
if($streamStartOfRecordingCheckBoxValue == 1)\n\
{\n\
string $buttonLabel = `button -q -label \"FACEMOTION3D_waitConnectionButton\"`;\n\
if($buttonLabel==\"Stream Live\")\n\
{\n\
FACEMOTION3D_wait_connectionTapped();\n\
python(\"import time;time.sleep(0.1);\");\n\
}\n\
}\n\
string $sendMessage = \"FACEMOTION3D_StartRecording\";\n\
FACEMOTION3D_sendMessageToiOS($sendMessage);\n\
\n\
if($playBackStartOfRecordingCheckBoxValue == 1)\n\
{\n\
play -forward true;\n\
}\n\
}\n\
\n\
global proc FACEMOTION3D_sendMessageToiOS(string $sendMessage)\n\
{\n\
string $iosipAddress = `textField -q -text \"FACEMOTION3D_iosipAddressTextField\"`;\n\
$iosipAddress = python(\"r'\"+$iosipAddress+\"'.replace(' ','')\");\n\
\n\
optionVar -sv \"FACEMOTION3D_iosipAddressTextField\" $iosipAddress;\n\
for($i = 0;$i<10;$i++)\n\
{\n\
python(\"from socket import socket,AF_INET,SOCK_DGRAM,SOL_SOCKET,SO_BROADCAST;s = socket(AF_INET, SOCK_DGRAM);s.setsockopt(SOL_SOCKET, SO_BROADCAST, 1);s.sendto('\"+$sendMessage+\"'.encode(), ('\"+$iosipAddress+\"', 49993));\");\n\
}\n\
\n\
string $optionMenuValue = `optionMenu -q -v FACEMOTION3D_connectionPriorityOptionMenu`;\n\
if($optionMenuValue == \"connection accuracy\")\n\
{\n\
python(\"exec(\\'if not \\\\\\'.255\\\\\\' in \\\\\\'\"+$iosipAddress+\"\\\\\\':\\\\n\\ttry:\\\\n\\t\tfrom socket import socket, AF_INET, SOCK_STREAM\\\\n\\t\ts = socket(AF_INET, SOCK_STREAM)\\\\n\\t\ts.settimeout(3.0)\\\\n\\t\ttry:\\\\n\\t\t\ts.connect((\\\\\\'\"+$iosipAddress+\"\\\\\\', 49994))\\\\n\\t\t\ts.sendall(\\\\\\'\"+$sendMessage+\"\\\\\\'.encode())\\\\n\\t\tfinally:\\\\n\\t\t\ts.close()\\\\n\\texcept:\\\\n\\t\tpass\\')\");\n\
}\n\
}\n\
\n\
global proc FACEMOTION3D_stopRecording()\n\
{\n\
int $playBackStartOfRecordingCheckBoxValue = `checkBox -q -v playBackStartOfRecordingCheckBox`;\n\
optionVar -sv \"playBackStartOfRecordingCheckBoxValue\" $playBackStartOfRecordingCheckBoxValue;\n\
if($playBackStartOfRecordingCheckBoxValue == 1)\n\
{\n\
play -st off;\n\
}\n\
\n\
int $streamStartOfRecordingCheckBoxValue = `checkBox -q -v streamStartOfRecordingCheckBox`;\n\
optionVar -sv \"streamStartOfRecordingCheckBoxValue\" $streamStartOfRecordingCheckBoxValue;\n\
if($streamStartOfRecordingCheckBoxValue == 1)\n\
{\n\
FACEMOTION3D_wait_connectionTapped();\n\
python(\"import time;time.sleep(0.1);\");\n\
}\n\
\n\
string $sendMessage = \"FACEMOTION3D_StopRecording\";\n\
FACEMOTION3D_sendMessageToiOS($sendMessage);\n\
\n\
int $bakeAfterRecordingCheckBoxValue = `checkBox -q -v bakeAfterRecordingCheckBox`;\n\
optionVar -sv \"bakeAfterRecordingCheckBoxValue\" $bakeAfterRecordingCheckBoxValue;\n\
\n\
if($bakeAfterRecordingCheckBoxValue == 1)\n\
{\n\
python(\"import time;time.sleep(0.05);\");\n\
FACEMOTION3D_wait_bakeRecordedAnimationPreSettings();\n\
}\n\
}\n\
\n\
global proc FACEMOTION3D_StartRecordingButtonTapped()\n\
{\n\
string $buttonLabel = `button -q -label \"FACEMOTION3D_StartRecordingButton\"`;\n\
if($buttonLabel==\"Start Recording\")\n\
{\n\
button -edit -label \"Stop Recording\" \"FACEMOTION3D_StartRecordingButton\";\n\
FACEMOTION3D_startRecording();\n\
}\n\
else if($buttonLabel==\"Stop Recording\")\n\
{\n\
button -edit -label \"Start Recording\" \"FACEMOTION3D_StartRecordingButton\";\n\
FACEMOTION3D_stopRecording();\n\
}\n\
}\n\
\n\
global proc FACEMOTION3D_audioFolderPathDialog()\n\
{\n\
string $result[] = `fileDialog2 -okCaption \"OK\" -fileMode 3 -dialogStyle 2`;\n\
if(`size $result` != 0)\n\
{\n\
string $audioFolderPath = $result[0];\n\
textField -edit -text $audioFolderPath FACEMOTION3D_audioSaveFolder;\n\
optionVar -sv \"FACEMOTION3D_audioSaveFolder\" $audioFolderPath;\n\
}\n\
}\n\
\n\
global proc FACEMOTION3D_StrengthOfBlendShapes_changed()\n\
{\n\
global float $FACEMOTION3D_StrengthOfBlendShapes;\n\
string $textfiledValue = `textField -q -text \"FACEMOTION3D_StrengthOfBlendShapes_TextField\"`;\n\
$FACEMOTION3D_StrengthOfBlendShapes = float($textfiledValue);\n\
optionVar -fv \"FACEMOTION3D_StrengthOfBlendShapes\" $FACEMOTION3D_StrengthOfBlendShapes;\n\
}\n\
\n\
global proc otherSettingsFrameLayoutCollapsed()\n\
{\n\
optionVar -iv \"FACEMOTION3D_otherSettingsFrameLayoutCollapsed\" 1;\n\
window -edit -h 131 FACEMOTION3DPanel;\n\
}\n\
\n\
global proc otherSettingsFrameLayoutCollapsedExpand()\n\
{\n\
optionVar -iv \"FACEMOTION3D_otherSettingsFrameLayoutCollapsed\" 0;\n\
}\n\
global proc recordingSettingsFrameLayoutCollapsed()\n\
{\n\
optionVar -iv \"FACEMOTION3D_recordingSettingsFrameLayoutCollapsed\" 1;\n\
window -edit -h 131 FACEMOTION3DPanel;\n\
}\n\
\n\
global proc recordingSettingsFrameLayoutCollapsedExpand()\n\
{\n\
optionVar -iv \"FACEMOTION3D_recordingSettingsFrameLayoutCollapsed\" 0;\n\
}\n\
\n\
global proc FACEMOTION3D_windowCloseCommand()\n\
{\n\
global int $FACEMOTION3D_Maya2022BugStatus;\n\
string $localipAddress = `textField -q -text \"FACEMOTION3D_localipAddressTextField\"`;\n\
$localipAddress = python(\"r'\"+$localipAddress+\"'.replace(' ','')\");\n\
\n\
string $streamPort = `textField -q -text \"FACEMOTION3D_streamPortTextField\"`;\n\
string $PORT_NUM = $localipAddress+\":\"+$streamPort;\n\
if(`commandPort -q $PORT_NUM`)\n\
{\n\
if($FACEMOTION3D_Maya2022BugStatus == 0)\n\
{\n\
commandPort -cl -n $PORT_NUM;\n\
}\n\
}\n\
\n\
string $bakePort = `textField -q -text \"FACEMOTION3D_bakePortTextField\"`;\n\
$PORT_NUM = $localipAddress+\":\"+$bakePort;\n\
if(`commandPort -q $PORT_NUM`)\n\
{\n\
if($FACEMOTION3D_Maya2022BugStatus == 0)\n\
{\n\
commandPort -cl -n $PORT_NUM;\n\
}\n\
}\n\
}\n\
\n\
global proc FACEMOTION3D_window()\n\
{\n\
FACEMOTION3D_Maya2022BugStatusCheck();\n\
FACEMOTION3D_compressAlgorithmCheck();\n\
global float $FACEMOTION3D_StrengthOfBlendShapes;\n\
\n\
if (`window -ex FACEMOTION3DPanel` )deleteUI FACEMOTION3DPanel;\n\
$window = `window -cc \"FACEMOTION3D_windowCloseCommand\" -s 1 -title \"FACEMOTION3D Panel\" -widthHeight 200 100 FACEMOTION3DPanel`;\n\
columnLayout -adjustableColumn true;\n\
button -h 60 -label \"Stream Live\" -command (\"FACEMOTION3D_wait_connectionTapped()\") \"FACEMOTION3D_waitConnectionButton\";\n\
text -h 5 -label \"\";\n\
button -h 40 -label \"Start Recording\" -command (\"FACEMOTION3D_StartRecordingButtonTapped()\") \"FACEMOTION3D_StartRecordingButton\";\n\
text -h 5 -label \"\";\n\
button -h 40 -label \"Bake Recorded Animation\" -command (\"FACEMOTION3D_wait_bakeRecordedAnimationPreSettings()\");\n\
\n\
int $collapsedFlag = 0;\n\
if(`optionVar -exists \"FACEMOTION3D_settingFrameLayoutCollapsed\"`)\n\
$collapsedFlag = `optionVar -q \"FACEMOTION3D_settingFrameLayoutCollapsed\"`;\n\
\n\
frameLayout -collapsable 1 -cl $collapsedFlag -label \"Settings\" -collapseCommand settingFrameLayoutCollapsed -expandCommand settingFrameLayoutExpand;\n\
columnLayout -adjustableColumn 1;\n\
\n\
string $os_system = \"Windows\";\n\
catchQuiet($os_system = python(\"import platform;platform.system()\"));\n\
\n\
string $localipAddress = \"0.0.0.0\";\n\
if(`optionVar -exists \"FACEMOTION3D_localipAddressTextField\"`)\n\
{\n\
$localipAddress =`optionVar -q \"FACEMOTION3D_localipAddressTextField\"`;\n\
$localipAddress = python(\"r'\"+$localipAddress+\"'.replace(' ','')\");\n\
}\n\
else\n\
{\n\
if($os_system == \"Windows\")\n\
{\n\
catchQuiet($localipAddress = python(\"import socket;socket.gethostbyname(socket.gethostname())\"));\n\
}\n\
}\n\
\n\
string $iosipAddress = \"255.255.255.255\";\n\
if(`optionVar -exists \"FACEMOTION3D_iosipAddressTextField\"`)\n\
{\n\
$iosipAddress =`optionVar -q \"FACEMOTION3D_iosipAddressTextField\"`;\n\
}\n\
else\n\
{\n\
if($os_system == \"Windows\")\n\
{\n\
if(catchQuiet($iosipAddress = python(\"import socket;socket.gethostbyname(socket.gethostname())\")))\n\
{\n\
\n\
}\n\
else\n\
{\n\
catchQuiet($iosipAddress = python(\"ip_str='\"+$iosipAddress+\"';sp=ip_str.split('.');sp[3] = '255';'.'.join(sp)\"));\n\
}\n\
}\n\
}\n\
\n\
int $collapsedFlag2 = 0;\n\
if(`optionVar -exists \"FACEMOTION3D_ipAddressSettingsFrameLayoutCollapsed\"`)\n\
$collapsedFlag2 = `optionVar -q \"FACEMOTION3D_ipAddressSettingsFrameLayoutCollapsed\"`;\n\
\n\
frameLayout -collapsable 1 -cl $collapsedFlag2 -label \"IP Address Settings\" -collapseCommand ipAddressSettingsFrameLayoutCollapsed -expandCommand ipAddressSettingsFrameLayoutCollapsedExpand;\n\
columnLayout -adjustableColumn 1;\n\
\n\
int $autoConnectCheckBoxValue = 1;\n\
if(`optionVar -exists \"autoConnectCheckBoxValue\"`)\n\
{\n\
$autoConnectCheckBoxValue = `optionVar -q \"autoConnectCheckBoxValue\"`;\n\
}\n\
rowLayout -numberOfColumns 2 -columnWidth2 10 170 -adjustableColumn 2;\n\
checkBox -label \"\" -v $autoConnectCheckBoxValue autoConnectCheckBox;\n\
text -label \"wait and connect\";\n\
setParent ..;\n\
\n\
optionMenu -label \"Prioritize\" -changeCommand FACEMOTION3D_connectionPriorityOptionMenuChanged FACEMOTION3D_connectionPriorityOptionMenu;\n\
menuItem -label \"connection accuracy\" -p FACEMOTION3D_connectionPriorityOptionMenu;\n\
menuItem -label \"connection speed\" -p FACEMOTION3D_connectionPriorityOptionMenu;\n\
\n\
string $FACEMOTION3D_connectionPriorityOptionMenu = \"connection speed\";\n\
if(`optionVar -exists \"FACEMOTION3D_connectionPriorityOptionMenu\"`)\n\
{\n\
$FACEMOTION3D_connectionPriorityOptionMenu = `optionVar -q \"FACEMOTION3D_connectionPriorityOptionMenu\"`;\n\
}\n\
optionMenu -e -v $FACEMOTION3D_connectionPriorityOptionMenu FACEMOTION3D_connectionPriorityOptionMenu;\n\
\n\
rowLayout -numberOfColumns 2 -columnWidth2 150 30 -adjustableColumn 2;\n\
text -label \"IP address of iOS \";\n\
textField -text $iosipAddress \"FACEMOTION3D_iosipAddressTextField\";\n\
setParent ..;\n\
\n\
text -h 5 -label \"\";\n\
\n\
rowLayout -numberOfColumns 2 -columnWidth2 150 30 -adjustableColumn 2;\n\
text -label \"IP address of this PC \";\n\
textField -text $localipAddress \"FACEMOTION3D_localipAddressTextField\";\n\
setParent ..;\n\
\n\
setParent ..;\n\
setParent ..;\n\
\n\
int $collapsedFlag_portFrame = 1;\n\
if(`optionVar -exists \"FACEMOTION3D_portSettingsFrameLayoutCollapsed\"`)\n\
$collapsedFlag_portFrame = `optionVar -q \"FACEMOTION3D_portSettingsFrameLayoutCollapsed\"`;\n\
\n\
frameLayout -collapsable 1 -cl $collapsedFlag_portFrame -label \"Port Settings\" -collapseCommand portSettingsFrameLayoutCollapsed -expandCommand portSettingsFrameLayoutCollapsedExpand;\n\
columnLayout -adjustableColumn 1;\n\
\n\
string $FACEMOTION3D_streamPortTextField = \"50001\";\n\
if(`optionVar -exists \"FACEMOTION3D_realtimePortTextField\"`)\n\
{\n\
$FACEMOTION3D_streamPortTextField =`optionVar -q \"FACEMOTION3D_streamPortTextField\"`;\n\
}\n\
rowLayout -numberOfColumns 2 -columnWidth2 150 30 -adjustableColumn 2;\n\
text -label \"Port for stream \";\n\
textField -text $FACEMOTION3D_streamPortTextField \"FACEMOTION3D_streamPortTextField\";\n\
setParent ..;\n\
\n\
text -h 5 -label \"\";\n\
\n\
string $FACEMOTION3D_bakePortTextField = \"55001\";\n\
if(`optionVar -exists \"FACEMOTION3D_bakePortTextField\"`)\n\
{\n\
$FACEMOTION3D_bakePortTextField =`optionVar -q \"FACEMOTION3D_bakePortTextField\"`;\n\
}\n\
rowLayout -numberOfColumns 2 -columnWidth2 150 30 -adjustableColumn 2;\n\
text -label \"Port for baking \";\n\
textField -text $FACEMOTION3D_bakePortTextField \"FACEMOTION3D_bakePortTextField\";\n\
setParent ..;\n\
\n\
setParent ..;\n\
setParent ..;\n\
\n\
int $collapsedFlag3 = 0;\n\
if(`optionVar -exists \"FACEMOTION3D_settingBakeAnimationFrameLayoutCollapsed\"`)\n\
{\n\
$collapsedFlag3 = `optionVar -q \"FACEMOTION3D_settingBakeAnimationFrameLayoutCollapsed\"`;\n\
}\n\
\n\
frameLayout -collapsable 1 -cl $collapsedFlag3 -label \"Settings for bake animation\" -collapseCommand settingBakeAnimationFrameLayoutCollapsed -expandCommand settingBakeAnimationFrameLayoutCollapsedExpand;\n\
columnLayout -adjustableColumn 1;\n\
\n\
int $recieveAudioCheckBoxValue = 1;\n\
if(`optionVar -exists \"recieveAudioCheckBoxValue\"`)\n\
{\n\
$recieveAudioCheckBoxValue = `optionVar -q \"recieveAudioCheckBoxValue\"`;\n\
}\n\
rowLayout -numberOfColumns 2 -columnWidth2 10 170 -adjustableColumn 2;\n\
checkBox -label \"\" -v $recieveAudioCheckBoxValue recieveAudioCheckBox;\n\
text -label \"Receive audio files\";\n\
setParent ..;\n\
\n\
\n\
string $audioFolderPath = \"\";\n\
$audioFolderPath = python(\"import os;os.path.expanduser('~/Desktop')\");\n\
if(`optionVar -exists \"FACEMOTION3D_audioSaveFolder\"`)\n\
{\n\
$audioFolderPath =`optionVar -q \"FACEMOTION3D_audioSaveFolder\"`;\n\
}\n\
\n\
rowLayout -numberOfColumns 3 -columnWidth3 100 60 20 -adjustableColumn 2;\n\
text -label \"Audio folder path\";\n\
textField -text $audioFolderPath FACEMOTION3D_audioSaveFolder;\n\
button -label \"...\" -command (\"FACEMOTION3D_audioFolderPathDialog()\");\n\
setParent ..;\n\
\n\
string $audioFileName = \"recordedAudio\";\n\
if(`optionVar -exists \"FACEMOTION3D_audioFileName\"`)\n\
{\n\
$audioFileName =`optionVar -q \"FACEMOTION3D_audioFileName\"`;\n\
}\n\
\n\
rowLayout -numberOfColumns 3 -columnWidth3 130 40 10 -adjustableColumn 2;\n\
text -label \"Audio file name\";\n\
textField -text $audioFileName FACEMOTION3D_audioFileName;\n\
text -label \".wav\";\n\
setParent ..;\n\
\n\
rowLayout -numberOfColumns 2 -columnWidth2 160 20 -adjustableColumn 2;\n\
text -label \"Bake/Play start frame\";\n\
textField -text \"0\" FACEMOTION3D_bakeStartFrame;\n\
setParent ..;\n\
\n\
setParent ..;\n\
setParent ..;\n\
\n\
int $collapsedFlag4 = 0;\n\
if(`optionVar -exists \"FACEMOTION3D_recordingSettingsFrameLayoutCollapsed\"`)\n\
{\n\
$collapsedFlag4 = `optionVar -q \"FACEMOTION3D_recordingSettingsFrameLayoutCollapsed\"`;\n\
}\n\
\n\
frameLayout -collapsable 1 -cl $collapsedFlag4 -label \"Settings for recording\" -collapseCommand recordingSettingsFrameLayoutCollapsed -expandCommand recordingSettingsFrameLayoutCollapsedExpand;\n\
columnLayout -adjustableColumn 1;\n\
\n\
int $bakeAfterRecordingCheckBoxValue = 1;\n\
if(`optionVar -exists \"bakeAfterRecordingCheckBoxValue\"`)\n\
{\n\
$bakeAfterRecordingCheckBoxValue = `optionVar -q \"bakeAfterRecordingCheckBoxValue\"`;\n\
}\n\
rowLayout -numberOfColumns 2 -columnWidth2 10 170 -adjustableColumn 2;\n\
checkBox -label \"\" -v $bakeAfterRecordingCheckBoxValue bakeAfterRecordingCheckBox;\n\
text -label \"Bake after the end of recording\";\n\
setParent ..;\n\
\n\
int $playBackStartOfRecordingCheckBoxValue = 1;\n\
if(`optionVar -exists \"playBackStartOfRecordingCheckBoxValue\"`)\n\
{\n\
$playBackStartOfRecordingCheckBoxValue = `optionVar -q \"playBackStartOfRecordingCheckBoxValue\"`;\n\
}\n\
rowLayout -numberOfColumns 2 -columnWidth2 10 170 -adjustableColumn 2;\n\
checkBox -label \"\" -v $playBackStartOfRecordingCheckBoxValue playBackStartOfRecordingCheckBox;\n\
text -label \"Playback at the start of recording\";\n\
setParent ..;\n\
\n\
int $streamStartOfRecordingCheckBoxValue = 1;\n\
if(`optionVar -exists \"streamStartOfRecordingCheckBoxValue\"`)\n\
{\n\
$streamStartOfRecordingCheckBoxValue = `optionVar -q \"streamStartOfRecordingCheckBoxValue\"`;\n\
}\n\
rowLayout -numberOfColumns 2 -columnWidth2 10 170 -adjustableColumn 2;\n\
checkBox -label \"\" -v $streamStartOfRecordingCheckBoxValue streamStartOfRecordingCheckBox;\n\
text -label \"Stream at the start of recording\";\n\
setParent ..;\n\
setParent ..;\n\
setParent ..;\n\
\n\
int $collapsedFlag5 = 0;\n\
if(`optionVar -exists \"FACEMOTION3D_otherSettingsFrameLayoutCollapsed\"`)\n\
{\n\
$collapsedFlag5 = `optionVar -q \"FACEMOTION3D_otherSettingsFrameLayoutCollapsed\"`;\n\
}\n\
\n\
frameLayout -collapsable 1 -cl $collapsedFlag5 -label \"Other Settings\" -collapseCommand otherSettingsFrameLayoutCollapsed -expandCommand otherSettingsFrameLayoutCollapsedExpand;\n\
columnLayout -adjustableColumn 1;\n\
\n\
if(`optionVar -exists \"FACEMOTION3D_StrengthOfBlendShapes\"`)\n\
{\n\
$FACEMOTION3D_StrengthOfBlendShapes =`optionVar -q \"FACEMOTION3D_StrengthOfBlendShapes\"`;\n\
}\n\
rowLayout -numberOfColumns 2 -columnWidth2 150 30 -adjustableColumn 2;\n\
text -label \"Strength Of BlendShapes \";\n\
textField -text $FACEMOTION3D_StrengthOfBlendShapes -cc \"FACEMOTION3D_StrengthOfBlendShapes_changed\" FACEMOTION3D_StrengthOfBlendShapes_TextField;\n\
setParent ..;\n\
setParent ..;\n\
\n\
\n\
\n\
setParent ..;\n\
setParent ..;\n\
setParent ..;\n\
showWindow $window;\n\
window -edit -h 131 FACEMOTION3DPanel;\n\
}\n\
FACEMOTION3D_window();";
global string $gShelfTopLevel;
string $path ;
string $ctab = `shelfTabLayout -q -st $gShelfTopLevel`;
string $ctabPath = $gShelfTopLevel + "|" + $ctab;
string $shelves[] = `layout -q -ca ($gShelfTopLevel + "|" + $ctab)`;
string $shelf;
for($shelf in $shelves)
{
$path = $gShelfTopLevel + "|" + $ctab + "|" + $shelf;
string $la = `shelfButton -q -l $path`;
if($la == "FM")
{
deleteUI $path;
}
}
string $thisDirPath = `whatIs "FindMe"`;
if($thisDirPath != "Unknown" && $thisDirPath != "Mel procedure entered interactively.")
{
string $appDataPath = "";
string $os_platform = python("import platform;platform.system()");
if($os_platform=="Windows")
{
$appDataPath = python("import os;os.path.join(os.getenv('APPDATA'),'FACEMOTION3D','icons')");
$appDataPath = fromNativePath( $appDataPath );
}
else if($os_platform=="Darwin")
{
$appDataPath = python("import getpass;'/Users/'+getpass.getuser()+'/Library/Application Support/FACEMOTION3D/icons'");
}
catchQuiet(`sysFile -makeDir $appDataPath`);
$thisDirPath = python("r'"+$thisDirPath+"'.replace('/FACEMOTION3D_to_Maya.mel','')");
$thisDirPath = python("r'"+$thisDirPath+"'.replace('Mel procedure found in: ','')");
string $thisDirPath_icon = $thisDirPath+"/FM_mayashelficon.png";
string $appDataPath_icon = $appDataPath+"/FM_mayashelficon.png";
if(`filetest -f $thisDirPath_icon`)
{
if(catchQuiet(`sysFile -copy $appDataPath_icon $thisDirPath_icon`))
{
scriptToShelf ("FM", $FACEMOTION3D_allString, true);
}
else
{
shelfButton -l "FM" -c $FACEMOTION3D_allString -image $appDataPath_icon -p $ctabPath;
}
}
else
{
scriptToShelf ("FM", $FACEMOTION3D_allString, true);
}
}
else
{
scriptToShelf ("FM", $FACEMOTION3D_allString, true);
}
eval $FACEMOTION3D_allString;
}
global proc FindMe() {}
FACEMOTION3D_addNewShelfTab();
FACEMOTION3D_addNewShelfButton();