babylonReskinTool.mel 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. global proc reskinSelectedMeshes() {
  2. $selection = `ls -sl`;
  3. $selected = size($selection);
  4. if ($selected > 0) {
  5. $skinName = `textFieldGrp -q -text myReskinName`;
  6. $copyName = `textFieldGrp -q -text myUvsetName`;
  7. $regenerate = `radioButtonGrp -q -select myReskinGenerate`;
  8. $influencers = `intSliderGrp -q -value myReskinInfluencers`;
  9. if ($skinName != "") {
  10. if ($copyName != "") {
  11. for ($i = 0; $i < $selected; $i++) {
  12. string $selectedObject = $selection[$i];
  13. select $selectedObject;
  14. string $uvSets[] = `polyUVSet -q -allUVSets`;
  15. int $uvSize = `size($uvSets)`;
  16. if ($uvSize > 0) {
  17. string $defaultSet = $uvSets[0];
  18. if ($defaultSet != $copyName) {
  19. polyUVSet -copy -uvSet $defaultSet -nuv $copyName;
  20. }
  21. }
  22. }
  23. select $selection;
  24. }
  25. $textField_exists = `objExists $skinName`;
  26. if ($textField_exists == 0) {
  27. waitCursor -state 1;
  28. $skinedCluster = $selection[0];
  29. $skinnedJoints = `skinCluster -q -inf $skinedCluster`;
  30. if ($selected > 1) {
  31. $duplicateObj = `duplicate $selection`;
  32. $createGrp = `group -n tempGroup`;
  33. $mergeType = ($regenerate - 1);
  34. $combine = `polyUnite -muv $mergeType -n $skinName $createGrp`;
  35. $deleteHistory = `delete -ch $combine`;
  36. delete $createGrp;
  37. } else {
  38. $duplicateObj = `duplicate -n $skinName $selection`;
  39. }
  40. $jnt = `select -add $skinnedJoints $skinName`;
  41. $selectionforBind = `ls -sl`;
  42. $newskin = `skinCluster -mi $influencers $selectionforBind`;
  43. $newSelect = `select -add $skinnedJoints $selection $skinName`;
  44. $transfer = `copySkinWeights -nm -sa "closestPoint" -ia "closestJoint"`;
  45. $cleared = `textFieldGrp -edit -text "" myReskinName`;
  46. $deleted = `delete $selection`;
  47. select -cl;
  48. waitCursor -state 0;
  49. } else {
  50. error ("Skin name is already in use: " + $skinName);
  51. }
  52. } else {
  53. error "No name specified for re-skining.";
  54. }
  55. } else {
  56. error "No meshes selected for re-skining.";
  57. }
  58. }
  59. global proc babylonReskinTool() {
  60. string $window = `window -title "Reskin Geometry Tool"`;
  61. columnLayout -adjustableColumn true;
  62. textFieldGrp -label "Skin Name" -text "" myReskinName;
  63. intSliderGrp -label "Max Influencers" -field true -minValue 1 -maxValue 4 -fieldMinValue 1 -fieldMaxValue 4 -value 4 myReskinInfluencers;
  64. textFieldGrp -label "Copy Set Name" -text "" myUvsetName;
  65. radioButtonGrp -label "UV Map Generation" -numberOfRadioButtons 3 -labelArray3 "No Merge" "Same Name" "Set Links" -select 2 myReskinGenerate;
  66. button -label "Reskin Selected Meshes" -command "reskinSelectedMeshes()" myReskinButton;
  67. showWindow $window;
  68. }