2013-11-24 26 views
0

我試圖通過在MAYA中旋轉另一個對象來控制對象的擠壓。但由於某種原因,它不起作用。它一直顯示我收到一個語法錯誤。我不確定它有什麼問題或如何解決它?在MEL中不擠壓的對象

這是它的代碼:

int $totalObjects = 1; 
polyPipe -n Rotator -ch on -o on -r 1.839239 -h 1.223879 ; 
polyExtrudeFacet -constructionHistory 1 -keepFacesTogether 1 -pvx 0.07364761256 -pvy 0.6119394158 -pvz 4.019784712 -divisions 1 -twist 0 -taper 1 -off 0 -thickness 0 -smoothingAngle 30 Rotator.f[36]; 
setAttr "polyExtrudeFace1.localTranslate" -type double3 0 0 0.930651 ; 


string $controlName = "Rotator"; 

float $spacing = 1.5; 

for($i=1;$i<=$totalObjects;$i++) 
{ 

string $outName = ("twist_"+ $i); 
string $outNameExtrude = ("ext_"+$i); 
float $extrusion = 0; 

polyCube -n $outName -ch on -o on -w 12.009218 -h 7.720124 -d 0.755927 -cuv 4 ; 
setAttr ($outName+".translateZ") ($spacing*$i); 


expression -s ($extrusion +"= Rotator.rotateY * 0.01*" + ($i*0.5) + ";") -o "" -ae 1 -uc all ; 


polyExtrudeFacet -n $outNameExtrude -constructionHistory 1 -keepFacesTogether 1 -pvx 0 -pvy 0 -pvz 4.0 -r $outName ; 
setAttr $outNameExtrude + ".localTranslate" -type double3 0 $extrusion 0 ; 


} 

更新:

int $totalObjects = 1; 
polyPipe -n Rotator -ch on -o on -r 1.839239 -h 1.223879 ; 
polyExtrudeFacet -constructionHistory 1 -keepFacesTogether 1 -pvx 0.07364761256 -pvy 0.6119394158 -pvz 4.019784712 -divisions 1 -twist 0 -taper 1 -off 0 -thickness 0 -smoothingAngle 30 Rotator.f[36]; 
setAttr "polyExtrudeFace1.localTranslate" -type double3 0 0 0.930651 ; 


string $controlName = "Rotator"; 

float $spacing = 1.5; 

for($i=1;$i<=$totalObjects;$i++) 
{ 

string $outName = ("twist_"+ $i); 
string $outNameExtrude = ("ext_"+$i); 
float $extrusion = 0; 

polyCube -n $outName -ch on -o on -w 12.009218 -h 7.720124 -d 0.755927 -cuv 4 ; 
setAttr ($outName+".translateZ") ($spacing*$i); 



polyExtrudeFacet -n $outNameExtrude -constructionHistory 1 -keepFacesTogether 1 -pvx 0 -pvy 0 -pvz 4.0 $outName ; 
setAttr ($outNameExtrude + ".localTranslate") -type double3 0 $extrusion 0 ; 


expression -s ($outNameExtrude + ".O[0]" +"= Rotator.rotateY * 0.01*" + ($i*0.5) + ";") -o "" -ae 1 -uc all ; 


} 
+0

爲什麼它被標記爲[tag:python]? –

+0

@ hus787是的標籤應該被刪除,建議編輯 – joojaa

回答

1

正如@theodox所指出的那樣。您不應該依賴Maya設置您設置的名稱。因爲如果瑪雅有一個命名衝突,等等,瑪雅會覆蓋你,所以每當你創造一些東西的時候總是抓住這個名字。因此,例如

polyExtrudeFacet -n $outNameExtrude 
       -ch 1 -keepFacesTogether 1 
       -pvx 0 -pvy 0 -pvz 4.0 $outName; 

應該是:

$tmp = `polyExtrudeFacet -n $outNameExtrude 
         -ch 1 
         -keepFacesTogether 1 
         -pvx 0 -pvy 0 -pvz 4.0 
          $outName` ; 
$outNameExtrude = $tmp[0]; 

這樣可以節省形成瑪雅在你的臉上吹了起來。所以,你的代碼看起來像:

proc makeCubesDrivenBy(
    string $controlName, int $totalObjects, float $spacing 
    ){ 

    for($i=1;$i<=$totalObjects;$i++) 
    { 
     string $tmp[]; 
     string $outName = ("twist_"+ $i); 
     string $outNameExtrude = ("ext_"+$i); 
     float $extrusion = 0; 

     $tmp = `polyCube -n $outName -ch 1 
       -o on -w 12.009218 
       -h 7.720124 -d 0.755927 
       -cuv 4`; 
     $outname = $tmp[0]; 
     setAttr ($outName+".translateZ") ($spacing*$i); 

     $tmp = `polyExtrudeFacet -n $outNameExtrude 
           -ch 1 
           -keepFacesTogether 1 
           -pvx 0 -pvy 0 -pvz 4.0 
           $outName` ; 
     $outNameExtrude = $tmp[0]; 
     setAttr ($outNameExtrude + ".localTranslate") 
        -type double3 0 $extrusion 0 ; 


     expression -s ($outNameExtrude + ".tz" + 
         "= Rotator.rotateY * 0.01*" + 
         ($i*0.5) + ";") -o "" 
         -ae 0 -uc all ; 
    } 
} 

{ 
    string $pipe[], $facet[]; 
    int $totalObjects = 1; 
    $pipe = `polyPipe -n Rotator -ch 1 
      -o on -r 1.839239 
      -h 1.223879` ; 
    $facet = `polyExtrudeFacet -ch 1 -keepFacesTogether 1 
        -pvx 0.07364761256 
        -pvy 0.6119394158 
        -pvz 4.019784712 
        -divisions 1 -twist 0 
        -taper 1 -off 0 
        -smoothingAngle 30 Rotator.f[36]`; 
    setAttr ($facet[0] + ".localTranslate") 
      -type double3 0 0 0.930651 ; 
    makeCubesDrivenBy($pipe[0], 1 , 1.5); 
} 

反正這個過程本身不是一樣複製歷史輸入,但我真的不能想你所追求的真正理智。

PS:不要在表達式中使用-ae 1,除非你真的必須,而且你沒有。

1

你的表情是

0= Rotator.rotateY * 0.01*0.5; 

不工作。你想要「.O [0]」嗎?

您的polyExtrudeFacet中還有一個-r標誌;我不認爲這是有效的。

最後,你應該在最後一行括住$ outNameExtrude +「.localTranslate」

+0

嗯,我只需要操縱LocalTranslateY,所以我認爲使用$擠壓會分配一個值,但我想不是。我更新了我的代碼,請你再看一遍。現在我得到的錯誤是:setAttr:沒有對象匹配名稱:ext_1.localTranslate – tailedmouse

+0

它看起來像你依賴名爲$ outNameExtrude的擠出 - 但不能保證,如果在場景中已經有這樣的名字的東西。您應該在變量中捕獲PolyExtrudeFacet的結果並設置該變量的值,而不是$ outNameExtrude – theodox

+0

我明白了,我很抱歉,我對此非常陌生,不知道該如何去做。如果你能告訴我,我會很感激嗎? – tailedmouse