[maya][mel]選択したグループに入った大量のメッシュのUVを自動配置するselect_Mesh_Group_To_replace_UV.mel

[maya][mel] select_Mesh_Group_To_replace_UV.mel – Automatically places UVs on a large number of meshes in a group.

ひさしぶりに楽しい楽しいmel script codingした。

Nurvs モデリングしたあとUVスケールが1×1になって全メッシュのUVが重なってる状態から

スクリプト実行で

自動配置できる。


select_Mesh_Group_To_replace_UV.mel

//実行
float $widthU = 0.05; //幅
float $heightV = 0.05; //高さ
float $ScaleU_ = 0.0625; //スケールX
float $ScaleV_ = 0.0625; //スケールY
float $newLineU_ =0.4; //改行位置
select_Mesh_Group_To_replace_UV($widthU,$heightV,$ScaleU_,$ScaleV_,$newLineU_);

//select Mesh Group To replace UV
global proc select_Mesh_Group_To_replace_UV(float $width,float $height,float $ScaleU,float $ScaleV ,float $newLineU)
{
    string $selectedArrFUllPath[] = `ls -long -sl`;
    print($selectedArrFUllPath);
    
    string $FirstSelect=$selectedArrFUllPath[0];
    string $inputNodes_mesh[] = `ls -type mesh -long -dag $FirstSelect`;
    $inputNodes_meshlong=size($inputNodes_mesh);
    string $inputNodes[];
    clear $inputNodes;
    string $mesh;
    for($d0 = 0; $d0 <$inputNodes_meshlong;$d0++){
        $mesh=$inputNodes_mesh[$d0];
        //string $parentS[] = `listRelatives -parent -path -type transform $mesh`;
        //$parent=$parentS[0];
        //$inputNodes[size($inputNodes)] = $parent;
        $bool=`gmatch $mesh "*Orig"`;
        if($bool==0){
            $inputNodes[size($inputNodes)] = $mesh;
        }
    }
    
    
    
    print("$inputNodes= ------------------------------------------------ \n");
    print($inputNodes);
    print("------------------------------------------------------------- \n");
    
    $inputNodeslong=size($inputNodes);
    
    float $buildX=0;
    float $buildY=0;
    //float $width=0.05;
    //float $height=0.05;
    for($f = 0; $f <$inputNodeslong;$f++){
        $mesh=$inputNodes[$f];
        $face=$mesh+".f[0:]";
        
        select -r $mesh;
        polyAutoProjection -lm 0 -pb 0 -ibd 1 -cm 0 -l 2 -sc 1 -o 1 -p 6 -ps 0.2 -ws 0 $face;
        select -r $face;
        
        $uvPivot=$mesh+".uvPivot";
        //setAttr $uvPivot -type double2 0.5 0.5 ;
        
        $U=$buildX*1-0.0;
        $V=$buildY*1-0.0;
        print("U:"+$U+" V:"+$V+"\n");
        //polyEditUV -relative false -u $buildX -v $buildY;
        $PivotU=$U+$width/2;
        $PivotV=$V+$height/2;
        polyEditUV -relative false -pu $PivotU -pv $PivotV -su $ScaleU -sv $ScaleU -u $buildX -v $buildY;
        //polyEditUV -relative false -pu $PivotU -pv $PivotV -su 0.8 -sv 0.8 ;
        //polyEditUV -relative false -pu $U -pv $V -su 0.2 -sv 0.2 ;
        if($buildX>$newLineU){
            print("new y----------Line\n");
            $buildY = $buildY+$width;
            $buildX = -$width;
        }
        $buildX = $buildX + $width;
    }
}
float $widthU = 0.05; //幅
float $heightV = 0.05; //高さ
float $ScaleU_ = 0.0625; //スケールX
float $ScaleV_ = 0.0625; //スケールY
float $newLineU_ =0.4; //改行位置
select_Mesh_Group_To_replace_UV($widthU,$heightV,$ScaleU_,$ScaleV_,$newLineU_);
/*
参考スクリプト
select -r group24_rearBoost_Up2.f[0:1601] group4_rear_Body1.f[0:7323] ;
setAttr "group24_rearBoost_UpShape2.uvPivot" -type double2 0.5 2.504208 ;
polyEditUV -u 0 -v 2.004208 ;
polyEditUV -pu 0.5 -pv 2.504208 -su 0.25 -sv 0.25 ;
*/

わかった事
polyEditUV コマンドは一発で6パラメータ入れないとだめ、

polyEditUV -relative false -pu $PivotU -pv $PivotV -su $ScaleU -sv $ScaleU -u $buildX -v $buildY;

polyEditUVコマンドは絶対スケール値を指定しても相対スケールが入る

polyEditUV -relative false -pu $PivotU -pv $PivotV -su $ScaleU -sv $ScaleU -u $buildX -v $buildY;

[maya2025]animImportExportがインポートメニューからなくなった様子なのだがmelでやると動くので置いておく。

■アニメーションのエクスポート&インポート機能を有効にする

  • プラグインマネージャーを開いて「animImportExport.mll」の「Loaded」「Auto load」をチェック

■アニメーションのエクスポート

  1. アニメーションをコピーしたいリグのトップノードを選択してツールバーの「File」→「Export Selection(オプション)」を実行する。 
  2. 出力時の設定で「General Option」→「File type」を「animExport」に設定する。  
  3.  「File Type Specific Options」→「Hierarchy階層」→「Below(下位)」に設定する。 

※階層ではなくそれぞれのノードを選択して出力しようとするとインポートの際に失敗することが多いので注意。

select -r Root ;
file -force -options “precision=8;intValue=17;nodeNames=1;verboseUnits=0;whichRange=1;range=0:10;options=keys;hierarchy=below;controlPoints=0;shapes=1;helpPictures=0;useChannelBox=0;copyKeyCmd=-animation objects -option keys -hierarchy below -controlPoints 0 -shape 1 ” -typ “animExport” -pr -es “D:/work/right.anim”;

■アニメーションのインポート

  1. アニメーションをロードしたい階層構造のトップノードを選択。
  2. 「File」→「Import(オプション)」で、先ほど出力したファイルを選択する。 
  3. 「File Type」を「animImport」にして、必要に応じて「Paste Method」の「Insert」「Replace」「Merge」を選択する。
select -r Root ;
file -import -type “animImport”  -ignoreVersion -ra true -mergeNamespacesOnClash false -namespace “right” -options “;targetTime=4;copies=1;option=insert;pictures=0;connect=0;”  -pr “D:/work/right.anim”;
 

成功した。

[maya]法線の仕上げ方法

maya sphere normal to mesh

Mayaで球状の法線をメッシュに反映するには?

Mayaで球状の法線をメッシュに反映させるには、法線転送機能を使用します。まず、球状の法線を持つメッシュ(転送元)と、法線を反映させたいメッシュ(転送先)を用意します。次に、転送元と転送先のメッシュを選択し、「メッシュ>アトリビュートの転送」を選択、頂点法線のみを転送するように設定して「転送」を実行します。これにより、転送元の法線情報が転送先のメッシュに適用され、球状の滑らかな陰影が再現されます

そんなことをしなくてもよかった

を直すには

Mesh Display > Set Vertex Normal

Match face normal

Apply

でOKだった。

[maya][mel] MELでファイルの読み取り専用をチェックする。

[maya][mel] Check if a file is read-only in MEL.


global proc MEL_FileReadModeCheck(string $Save_path){
    //MELでファイルの読み取り専用をチェックする。
    print("MEL_FileReadModeCheck("+$Save_path+") \n");
    python("import os");

    int $FileReadOnlybool = python("os.access('"+$Save_path+"', os.W_OK)");
    print("$FileReadOnlybool= "+$FileReadOnlybool+" \n");
    if($FileReadOnlybool==0){
        print("読み取り専用 のため書き込み不可 \n");    
    }else{
        print("書き込み出来ます \n");      
    }
}
MEL_FileReadModeCheck("D:/check_ON.txt");
MEL_FileReadModeCheck("D:/check_OFF.txt");

[maya][mel] get mesh from material

maya mel get mesh from material

hyperShade -objects materialName;
//結果のmeshは選択される

Function



global proc string get_MeshTransform_from_Material_v2(string $mat){   
   string $selected[];
   //選択を取っておく
   $selected =`ls -sl`;
   string $mesh_arr[];
   //$mesh_arr =`hyperShade -objects $mat`;
   //結果のmeshは選択されるので
   hyperShade -objects $mat;
   //選択からとる
   $mesh_arr =`ls -sl`;
   int $mesh_arr_len=size($mesh_arr);
   string $returnStr;
   print("$mesh_arr_len= "+$mesh_arr_len+"\n");
   if($mesh_arr_len==0){
       $returnStr="";
   }else{
       print("$mesh_arr= "+ stringArrayToString($mesh_arr, ", ") +"\n");
       string $mesh= $mesh_arr[0];
       string $trans_arr[] = `listRelatives -noIntermediate -fullPath -parent $mesh`;
       print("$trans_arr= "+ stringArrayToString($trans_arr, ", ") +"\n");
       $returnStr=$trans_arr[0];
   }
   //選択を戻す
   select -cl;
   string $sel;
   for($sel in $selected){
       select -add $sel;
   };
   return $returnStr;
}

[maya][mel] mesh から SkinCluster を取得する

get SkinCluster from mesh

string $SkinSkinCluster = `findRelatedSkinCluster $mesh`;

応用例

        print(">>>>>>>>>>>>>SkinWeightCheck Start>>>>>>>>>>\n");
        select "|parts_low";
        string $selected[] = `ls -sl -long -absoluteName`;
        string $selectedStr = stringArrayToString($selected, ",");   // ","を区切り文字として結合する
        print("SkinWeightCheckの 選択したもの $selected= "+$selectedStr+"\n");
        
        string $mesh[];
        for ($sel in $selected) {
          string $allMesh[] = `listRelatives -ni -pa -ad -typ "mesh" $sel`;
          for ($am in $allMesh) {
            string $trans[] = `listRelatives -ni -pa -p $am`;
            $mesh[size($mesh)] = $trans[0];
          }
        }
        
        $mesh = stringArrayRemoveDuplicates($mesh);
        string $meshStr = stringArrayToString($mesh, ",");   // ","を区切り文字として結合する
        print("SkinWeightCheckの メッシュのみ選別したもの $mesh= "+$meshStr+"\n");
       
       for ($mesh_i in $mesh){
           //print("$mesh_i= "+$mesh_i+"\n");
           string $SkinCluster = `findRelatedSkinCluster $mesh_i`;
           print("メッシュ : "+$mesh_i+"   SkinCluster : "+$SkinCluster+" \n");
           //string $influenceJoint[] = `skinCluster -q -influence $mesh_i`;
           string $influenceJoint[];
           int $inflenceJointBool=0;
           if ( catch ($influenceJoint=`skinCluster -q -influence $mesh_i`)) {
               print("B ------------------------------------------------------------------------------->>>>>メッシュ : "+$mesh_i+" のインフルエンスジョイントがありません!!NG \n");
               $inflenceJointBool=1;
               $AllWeightMeshBool=1;
           }else{
               print("A OK \n");
               $inflenceJointBool=0;
           }
           int $WeightMeshBool=0;
           if($inflenceJointBool==0){
               print("メッシュ : "+$mesh_i+"   influenceJoint : "+$influenceJoint[0]+" \n");
               //vtx[100] の joint1 の weight を取得
               //skinPercent( 'skinCluster1', 'pPlane1.vtx[100]', t='joint1', query=True, value=True)
               //string $weight[] = `skinPercent -query -value -t $influence[0] $SkinCluster $mesh `;
               string $vertex = $mesh_i+".vtx[0]" ;
               //string $weight[] = `skinPercent -query -value $vertex $SkinCluster`;
               float $weightFloatArr[] = `skinPercent -query -value $SkinCluster $vertex`;
               print("$weightFloatArr= "+floatArrayToString($weightFloatArr, ", ")+"\n");
               //skinPercent -query -value skinCluster1 pPlane1.vtx[100];
               float $weightAll=0;
               for ($val in $weightFloatArr){
                  $weightAll=$weightAll + $val;
               }
               print("$weightAll= "+$weightAll+"\n");
               
               if($weightAll>0){
                   print("SkinWeight OK !!! $mesh_i= "+$mesh_i+" OK!!!!!\n");
               }else{
                   $WeightMeshBool=1;
                   print("SkinWeight -----------------------------------------------------------スキンウェイトがありません--Attention !!! $mesh_i= "+$mesh_i+" NG!!!!!\n");
               }
               $AllWeightMeshBool=$AllWeightMeshBool+$WeightMeshBool;
           }

       }//for

参考

[maya][python] findRelatedskinCLuster

https://discourse.techart.online/t/maya-python-findrelatedskincluster/2673

[Maya]特殊な複製 duplicate -upstreamNodes でスキンウェイトごと複製する。

あるようで知らない特殊な複製。

//	選択したノードに至る上流ノード (およびその接続) も複製されます。
//  スキンウェイトなどもコピーされます。
duplicate -upstreamNodes;

上記の場合

duplicate -returnRootsOnly -upstreamNodes; 
group root1 parts_low1;

カスタムした例

global proc skinWeightCopy_JointMeshGroup(){
    //選択
    select root parts_low;
    //スキンウェイトモデルのスキンウェイトごとコピー
    duplicate -returnRootsOnly -upstreamNodes; 
    //グループ化
    group -name "group_dup" root1 parts_low1;
    //元の名前にリネーム
    rename "group_dup|root1" "root";
    rename "group_dup|parts_low1" "parts_low";
}
skinWeightCopy_JointMeshGroup();

combine しながらエクスポート

global proc skinWeightCopy_JointMeshGroup(){
    //選択
    select "|root" "|parts_low";
    //スキンウェイトモデルのスキンウェイトごとコピー
    duplicate -returnRootsOnly -upstreamNodes; 
    //グループ化
    group -name "group_dup" root1 parts_low1;
    //元の名前にリネーム
    rename "group_dup|root1" "root";
    rename "group_dup|parts_low1" "parts_low";
}

global proc group_dup_parts_low_combine(){
    
    
    string $selected[] = `ls -sl -long -absoluteName`;
    //string $selectedStr = stringArrayToString($selected, ",");   // ","を区切り文字として結合する
    //print("選択したもの $selected= "+$selectedStr+"\n");
    string $mesh[];
    for ($sel in $selected) {
      string $allMesh[] = `listRelatives -ni -pa -ad -typ "mesh" $sel`;
      for ($am in $allMesh) {
        string $trans[] = `listRelatives -ni -pa -p $am`;
        $mesh[size($mesh)] = $trans[0];
      }
    }
    
    $mesh = stringArrayRemoveDuplicates($mesh);
    string $meshStr = stringArrayToString($mesh, ",");   // ","を区切り文字として結合する
    print(" メッシュのみ選別したもの $mesh= "+$meshStr+"\n");
    
    

    select -r $mesh; // <メッシュのみ選択
    // Combine実行
      
    // Skeletalだった場合
    string $combine[] = `polyUniteSkinned -ch 0 -muv 1`;
    rename $combine[0] "MeshGP";

    //よけておくグループ化
    select "|root" "parts_low";
    string $group_root;
    $group_root =`group -world -name "group_root"`;
        
    //MeshGPをparts_lowへ入れる
    select "MeshGP";
    string $group_parts_low;
    $group_parts_low =`group -world -name "parts_low"`;
       
    //worldへ移動 
    parent -world "group_dup|root";
    
    //出力用選択
    select "|root" "|parts_low";
    
    // Export
    // --------------------------------------------------------------------------
    simple_model_common_Export(2, "D:/MOSADesign/WorkData/Avatar/008/001/PL_008_001_001/Game/SK_PL_008_001_001_Body.fbx", 0);
    
    //おかたずけ partslow|MeshGP rootを削除
    delete "|parts_low" "|root" "|group_dup";
    
    //worldへ移動 
    parent -world "group_root|root";
    //worldへ移動 
    parent -world "group_root|parts_low"; 
    //group_root 削除
    delete "|group_root";
}



// Export
//--------------------------------------------------------------------------
global proc simple_model_common_Export(int $type, string $expName, int $modelType) {
  showHidden -a;
  // if($type == 2) {
  if ($type == 1) {
    FBXExportSmoothMesh -v 0;
  } else {
    FBXExportSmoothMesh -v 1;
  }
  FBXExportAnimationOnly -v 0;
  FBXExportInAscii -v 0 ;
  FBXExportConvertUnitString cm;
  FBXExportTriangulate -v 0;
  FBXExportSmoothingGroups -v 1;
  FBXExportConstraints -v 0;
  FBXExport -f $expName -s;
}

参考URL

https://help.autodesk.com/cloudhelp/2025/ENU/Maya-Tech-Docs/Commands/duplicate.html

http://me.autodesk.jp/wam/maya/docs/Maya2010/Commands/duplicate.html

選択したMeshグループAからBへスキンウェイトを全部コピーMEL

Meshグループに無数にMeshがはいっててスキンウェイトをコピーするのがめんどくさくなったから書いたよ

Aのメッシュグループから
Bのメッシュグループにコピーしていく

動作はちょっと逆で
Bのグループのメッシュ名をループして
Aのグループのメッシュ名にあるか探す
あったらスキンウェイトコピー
なかったらrejectedリストに入れてます。
最後にrejectedListを表示するのでスキンウェイトしなかったメッシュのリストが出ます。

// SkinWeightCopy First Select MeshGroup to Second Select MeshGroup 
string $selectedArrFUllPath[] = `ls -long -sl`;
print($selectedArrFUllPath);

string $FirstSelect=$selectedArrFUllPath[0];

string $SecondSelect=$selectedArrFUllPath[1];

string $rejectArr[];

string $inputNodes[] = `ls -type transform -long -dag $FirstSelect`;
string $destNodes[] = `ls -type transform -long -dag $SecondSelect`;

$inputNodeslong=size($inputNodes);
$destNodeslong=size($destNodes);

string $buffer[];
string $buffer_i[];
$finded = 0;
for($d = 0; $d <$destNodeslong;$d++){
    string $destNode_name=$destNodes[$d];
    
    if($destNode_name==$SecondSelect){
            
    }else{
        print("$destNode_name= "+$destNode_name+"\n");
        
        $numTokens = `tokenize $destNode_name "|" $buffer`;
        $bufferlong=size($buffer);
        string $destNode_name_Short = $buffer[$bufferlong-1]+"";
        print("$destNode_name_Short= "+$destNode_name_Short+"\n");
        $finded = 0;
        for($i = 0; $i <$inputNodeslong;$i++){
            string $inputNode_name=$inputNodes[$i];
            $numTokens_i = `tokenize $inputNode_name "|" $buffer_i`;
            $bufferlong_i=size($buffer_i);
            string $inputNode_name_Short = $buffer_i[$bufferlong_i-1]+"";
            print("$inputNode_name_Short= "+$inputNode_name_Short+"\n");
                
            //$index=`gmatch $inputNode_name $destNode_name_Short`;
            //if($index > 0){
            if($inputNode_name_Short==$destNode_name_Short){
                //$blendShapeName = $blendshapeRet_name;
                print("$destNode_name= "+$destNode_name+" isHit!! "+"\n");
                select -r $inputNode_name;
                select -add $destNode_name;
                copySkinWeights  -noMirror -surfaceAssociation closestPoint -influenceAssociation closestJoint;
                //copySkinWeights -noMirror -surfaceAssociation closestPoint -influenceAssociation closestJoint -sourceSkin $inputNode_name -destinationSkin $destNode_name;
                $finded = 1;
            }
        }
        if($finded==0){
            $rejectArr[size($rejectArr)] = $destNode_name;
        }
    }
}
print("----rejected_list---start"+"\n");
print($rejectArr);
print("----rejected_list---end"+"\n");
select -r $FirstSelect ;
select -add $SecondSelect ;

メッシュグループ内のグループを無視できるように、MeshのTransformだけをフィルターした。

// SkinWeightCopy First Select MeshGroup to Second Select MeshGroup 
string $selectedArrFUllPath[] = `ls -long -sl`;
print($selectedArrFUllPath);

string $FirstSelect=$selectedArrFUllPath[0];

string $SecondSelect=$selectedArrFUllPath[1];

string $rejectArr[];

//string $inputNodes[] = `ls -type transform -long -dag $FirstSelect`;
//string $destNodes[] = `ls -type transform -long -dag $SecondSelect`;

string $inputNodes_mesh[] = `ls -type mesh -long -dag $FirstSelect`;
string $destNodes_mesh[] = `ls -type mesh -long -dag $SecondSelect`;

$inputNodes_meshlong=size($inputNodes_mesh);
$destNodes_meshlong=size($destNodes_mesh);

string $inputNodes[];
string $destNodes[];
clear $inputNodes;
clear $destNodes;
string $mesh;
string $parent;
for($d0 = 0; $d0 <$inputNodes_meshlong;$d0++){
    $mesh=$inputNodes_mesh[$d0];
    string $parentS[] = `listRelatives -parent -path -type transform $mesh`;
    $parent=$parentS[0];
    $inputNodes[size($inputNodes)] = $parent;
}
for($d0 = 0; $d0 <$destNodes_meshlong;$d0++){
    $mesh=$destNodes_mesh[$d0];
    string $parentS[] = `listRelatives -parent -path -type transform $mesh`;
    $parent=$parentS[0];
    $destNodes[size($destNodes)] = $parent;
}

print("$inputNodes= ------------------------------------------------ \n");
print($inputNodes);

print("$destNodes= ------------------------------------------------ \n");
print($destNodes);



$inputNodeslong=size($inputNodes);
$destNodeslong=size($destNodes);

string $buffer[];
string $buffer_i[];
$finded = 0;
for($d = 0; $d <$destNodeslong;$d++){
    string $destNode_name=$destNodes[$d];
    
    if($destNode_name==$SecondSelect){
            
    }else{
        print("$destNode_name= "+$destNode_name+"\n");
        
        $numTokens = `tokenize $destNode_name "|" $buffer`;
        $bufferlong=size($buffer);
        string $destNode_name_Short = $buffer[$bufferlong-1]+"";
        print("$destNode_name_Short= "+$destNode_name_Short+"\n");
        $finded = 0;
        for($i = 0; $i <$inputNodeslong;$i++){
            string $inputNode_name=$inputNodes[$i];
            $numTokens_i = `tokenize $inputNode_name "|" $buffer_i`;
            $bufferlong_i=size($buffer_i);
            string $inputNode_name_Short = $buffer_i[$bufferlong_i-1]+"";
            print("$inputNode_name_Short= "+$inputNode_name_Short+"\n");
                
            //$index=`gmatch $inputNode_name $destNode_name_Short`;
            //if($index > 0){
            if($inputNode_name_Short==$destNode_name_Short){
                //$blendShapeName = $blendshapeRet_name;
                print("$destNode_name= "+$destNode_name+" isHit!! "+"\n");
                select -r $inputNode_name;
                select -add $destNode_name;
                copySkinWeights  -noMirror -surfaceAssociation closestPoint -influenceAssociation closestJoint;
                //copySkinWeights -noMirror -surfaceAssociation closestPoint -influenceAssociation closestJoint -sourceSkin $inputNode_name -destinationSkin $destNode_name;
                $finded = 1;
            }//if
        }//for
        if($finded==0){
            $rejectArr[size($rejectArr)] = $destNode_name;
        }//if
    }//if
}//for
print("----rejected_list---start"+"\n");
print($rejectArr);
print("----rejected_list---end"+"\n");
select -r $FirstSelect ;
select -add $SecondSelect ;

maya mel python 環境変数 一覧 path MAYA_SCRIPT_PATH

maya mel python environment variables list path MAYA_SCRIPT_PATH

maya python 自動的にロードする場所と

maya python 自動的にロードする場所を追加する方法。

MEL

//getenv "MAYA_SCRIPT_PATH";//パスを確認

$sPath=`getenv "PATH"`;
print("$sPath= "+$sPath+"\n");
$sMAYA_SCRIPT_PATH=`getenv "MAYA_SCRIPT_PATH"`;
print("$sMAYA_SCRIPT_PATH= "+$sMAYA_SCRIPT_PATH+"\n");

$array = stringToStringArray($sMAYA_SCRIPT_PATH, ";");

for ($MSP in $array) {
    print($MSP+"\n");
}

Python

import os
print("------------------------PATH---------------------------")
ePath = os.environ["PATH"]
ePath_List=ePath.split(";")
for ePath_line in ePath_List:
    #for ev in environ:
    print(ePath_line)

print("------------------------MAYA_SCRIPT_PATH-----------------------------")

mayaScriptPath = os.environ["MAYA_SCRIPT_PATH"]
mayaScriptPath_List=mayaScriptPath.split(";")
for mayaScriptPath_line in mayaScriptPath_List:
    #for ev in environ:
    print(mayaScriptPath_line)

大体自分のパスを追加したい時にこの記事見てるので

追加方法も載せておく、

$sMAYA_SCRIPT_PATH_StrArr=getenv "MAYA_SCRIPT_PATH";
print(“$sMAYA_SCRIPT_PATH_StrArr= “+$sMAYA_SCRIPT_PATH_StrArr+”\n”);

の結果はこう。配列にみえるけどカンマ ; で区切られた文字列

$sMAYA_SCRIPT_PATH_StrArr= D:/MOSADesign/WorkTools/Maya/MOSATool/python/USD_Temp/scripts;C:/Users/furcr/Documents/maya/2022/ja_JP/scripts;C:/Users/furcr/Documents/maya/2022/scripts;C:/Users/furcr/Documents/maya/scripts;C:/Users/furcr/Documents/maya/2022/ja_JP/presets;C:/Users/furcr/Documents/maya/2022/ja_JP/prefs/shelves;C:/Users/furcr/Documents/maya/2022/ja_JP/prefs/markingMenus;C:/Users/furcr/Documents/maya/2022/ja_JP/prefs/scripts;C:/Program Files/Autodesk/Maya2022/scripts;C:/Program Files/Autodesk/Maya2022/scripts/startup;C:/Program Files/Autodesk/Maya2022/scripts/shelves;C:/Program Files/Autodesk/Maya2022/scripts/others;C:/Program Files/Autodesk/Maya2022/scripts/AETemplates;C:/Program Files/Autodesk/Maya2022/scripts/unsupported;C:/Program Files/Autodesk/Maya2022/scripts/paintEffects;C:/Program Files/Autodesk/Maya2022/scripts/fluidEffects;C:/Program Files/Autodesk/Maya2022/scripts/hair;C:/Program Files/Autodesk/Maya2022/scripts/cloth;C:/Program Files/Autodesk/Maya2022/scripts/live;C:/Program Files/Autodesk/Maya2022/scripts/fur;C:/Program Files/Autodesk/Maya2022/scripts/muscle;C:/Program Files/Autodesk/Maya2022/scripts/turtle;C:/Program Files/Autodesk/Maya2022/scripts/FBX;C:/Program Files/Autodesk/Maya2022/scripts/mayaHIK;C:/Program Files/Autodesk/Maya2022/plug-ins/ATF/scripts;C:/Program Files/Autodesk/Bifrost/Maya2022/2.2.1.0/bifrost/scripts;C:/Program Files/Autodesk/Maya2022/plug-ins/MASH/scripts;C:/Program Files/Autodesk/MayaUSD/Maya2022/0.8.0/mayausd/MayaUSD3/plugin/adsk/scripts;C:/Program Files/Rokoko Motion Library/Maya/2022/scripts;C:/Program Files/Autodesk/Maya2022/plug-ins/fbx/scripts;C:/Program Files/Side Effects Software/Houdini Engine/Maya/21.0.671/maya2022/scripts;C:/Program Files/Autodesk/Maya2022/plug-ins/camd/scripts;D:/Sandbox/mgear/modules/scripts;C:/Program Files/Autodesk/Arnold/maya2022/scripts;C:/Program Files/Allegorithmic/Substance in Maya/2022/scripts;C:/Program Files/Autodesk/Maya2022/plug-ins/sweep/scripts;C:/Program Files/Autodesk/Bifrost/Maya2022/2.2.1.0/vnn/scripts;C:/Program Files/Autodesk/Maya2022/plug-ins/xgen/scripts;C:/Program Files/Autodesk/Arnold/maya2022/scripts/mtoa/mel;

なので

C:/Users/furcr/Documents/maya/2022/scripts/userSetup.mel

にこう書けばMAYA_SCRIPT_PATHに追加できる。

print("C:/Users/furcr/Documents/maya/2022/scripts/userSetup.mel\n");

///putenv Add---------------------------------------------------
//putenv "MAYA_SCRIPT_PATH";//パスを追加
proc Add_MAYA_SCRIPT_PATH(string $Add_Path)
{
    //$Add_Path="D:/furcraeaTokyo/furcraeaTool";
    $sMAYA_SCRIPT_PATH_StrArr=`getenv "MAYA_SCRIPT_PATH"`;
    print("$sMAYA_SCRIPT_PATH_StrArr= "+$sMAYA_SCRIPT_PATH_StrArr+"\n");
    //$sMAYA_SCRIPT_PATH_Arr[size($sMAYA_SCRIPT_PATH_Arr)] = $Add_Path; 
    $sMAYA_SCRIPT_PATH_StrArr=$sMAYA_SCRIPT_PATH_StrArr+";"+$Add_Path;
    $putenv_Result=`putenv "MAYA_SCRIPT_PATH" $sMAYA_SCRIPT_PATH_StrArr`;
    print("$putenv_Result= "+$putenv_Result+"\n");
}
Add_MAYA_SCRIPT_PATH("D:/furcraeaTokyo/furcraeaTool");
Add_MAYA_SCRIPT_PATH("D:/furcraeaTokyo/furcraeaTool/mel");
Add_MAYA_SCRIPT_PATH("D:/furcraeaTokyo/furcraeaTool/python");


///putenv Add-----------------------------------------------------
//---------------------------------------------------------
//getenv "MAYA_SCRIPT_PATH";//パスを確認

$sPath=`getenv "PATH"`;
print("$sPath= "+$sPath+"\n");
$sMAYA_SCRIPT_PATH=`getenv "MAYA_SCRIPT_PATH"`;
print("$sMAYA_SCRIPT_PATH= "+$sMAYA_SCRIPT_PATH+"\n");

$array = stringToStringArray($sMAYA_SCRIPT_PATH, ";");

for ($MSP in $array) {
    print($MSP+"\n");
}
//---------------------------------------------------------


python("import maya.cmds as cmds");
python("selection = cmds.ls(sl=True)");
python("print(selection)");


//Pythonのシステムに追加
python("import sys");
python("sys.path.append('D:/furcraeaTokyo/furcraeaTool/python')");