2013-11-24 5 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가 설정하라는 이름을 사용해서는 안됩니다. 왜냐하면 Maya가 명명 충돌 (Maying Collash)을 가지고 있다면 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); 
} 

어쨌든 프로세스 자체는 역사의 입력을 복사 할 수 있지만 난 정말 당신이 후에 무엇인지 추측 할 수있는 정말 제정신 밤은.

추 신 : 실제로 사용하지 않는 한 표현에서 -ae 1을 사용하지 마십시오.

1

귀하의 표현이 작동하지 않습니다

0= Rotator.rotateY * 0.01*0.5; 

입니다. 대신 .O [0] "을 원하십니까?

또한 polyExtrudeFacet에는 -r 플래그가 있습니다. 나는 그것이 효과가 있다고 생각하지 않는다.

마지막으로 $ outNameExtrude + ".localTranslate"를 마지막 줄에 괄호로 묶어야합니다.

+0

글쎄, 난 단지 $ LocalTranslateY를 조작해야합니다, 그래서 나는 $ extrusion을 사용하여 값을 지정할 것이라고 생각합니다. 내 코드를 업데이트하면 다시 살펴볼 수 있습니까? 지금 얻고있는 오류는 다음과 같습니다 setAttr : 객체가 이름과 일치하지 않습니다 : ext_1.localTranslate – tailedmouse

+0

이름이 $ outNameExtrude 인 압출에 의존하는 것처럼 보입니다 -하지만 그 이름이 이미 장면에있는 경우에는 보장되지 않습니다 . 변수에서 PolyExtrudeFacet의 결과를 캐치하고 그 변수의 값을 $ outNameExtrude가 아닌 – theodox

+0

으로 설정해야합니다. 유감스럽게 생각합니다. 저는이 일에 매우 익숙하며, 어떻게하면 좋을지 모릅니다. 나에게 보여 주면 정말 고맙겠 니? – tailedmouse