2017-11-17 4 views
0

현재 MEL 용 무작위 객체 생성기 스크립트가 있습니다. 파이썬으로 변환하려고합니다. 이것은 숙제 임무이고 나는 특정 부분에 갇혀있다. 각 축에 임의의 눈금을 추가하려고합니다. 나는 계속 목록 "("str "이 아닌)만을 연결할 수 있습니다." 여기에 내가 지금까지 가지고있는 것이있다 :MEL 스크립트를 Python으로 변환하려고합니다.

#to use: my_rock_gen(1, poly_rock1) 

#import python libraries 
import maya.cmds as MC 
import random 

#define procedure with number of rocks and name 

def my_rock_gen(number_of_rocks=0, rock_name="poly_rock1"): 

    #loop to generate rocks 
    for n in range(number_of_rocks): 

     #start with creating polygon object, basic cube 
     rock=MC.polyCube (name=rock_name) 

     #smooth it once 
     MC.polySmooth (rock, dv=2)   

     #give random scales 
     random_sx= random.uniform (.3, 3) 
     random_sy= random.uniform (.3, 3) 
     random_sz= random.uniform (.3, 3) 

     #set random values to scales 
     MC.setAttr ((rock + ".scaleX"), random_sx)" 

나는 마지막 비트에서 붙어있다. MEL에서 여기에 내가 지난 2 개 부품이 내용은 다음과 같습니다

//set random scale range 
float $random_sx = `rand .3 3`; 
float $random_sy = `rand .3 3`; 
float $random_sz = `rand .3 3`; 

//set random values to scales 
setAttr ($rock[0] + ".sx") $random_sx; 
setAttr ($rock[0] + ".sx") $random_sy; 
setAttr ($rock[0] + ".sx") $random_sz; 

은 $ 바위 [0] 스크립트의 시작 부분으로 작성됩니다. 구문이 setAttr 부분에 어떻게 가야 하는지를 파악할 수 없습니다. 어떤 도움을 주셔서 감사합니다.

답변

0

바위 목록,

rock = [MC.setAttr((x),random_sx) for x in rock] 

+0

내가 y 및 z의 규모에 대해이 작업을 반복해야 목록의 요소에 ATTR를 설정하지 (여기에는 마야)을 시도하고 바위가 이미 이전에 선언했다. 어떻게 추가 할 수 있습니까? 또한 rock 변수를 다시 사용하여 3 축 모두에서 임의의 회전을 수행합니다. – JonCathcart

+0

이것은 바위의 각 엘레멘트마다 random_sx를 설정합니다. 다른 값을 원하거나 더 많은 것을 설정하고 싶다면'for myRock in rock : '루프를 사용하고'myRock' (당신은 그것을 간지럽 히고, 돌리거나, 먼지를 ...)에해야 할 일을하십시오. 나는 일반적인 파이썬 지식을 기반으로 Maya를 사용하지 않았다. –