2017-02-22 5 views
0

이 VEX 스크립트에 문제가 있습니다. 에서 @는 attributs 대신 변수 목록에 새 값 추가

f[]@myList; // create list attribut 
float pavW = 0.0; 
for(int i = 1 ; i < 11 ; i++){ 
    string path = "../widthPav" + itoa(i); 
    pavW = ch(path); // take the value in the specific channel 
    if (i == 1){ 
     push(@myList,pavW); //add new component of value to myList 
    } 
    if (pavW > 0){ 
     foreach (int j ; float value ; @myList){ 
      if (pavW == value){ 
       break; 
      }else{ 
       push(@myList,pavW); //add new component... 
       break; 
      } 
     } 
    } 

} 내가 'pavW은' '으로 myList'의 요소의 differents의 경우 'myList에'에 'pavW'값을 추가 할

를 만드는 것입니다. 결과는 예외가 아닙니다.

+0

그것은 벡스 스크립트, 3 차원 소프트웨어의 독점 langage입니다. 그것은 C처럼 보입니다. @ 속성을 만들 수 있습니다. 변수와 비슷하지만 3d 컨텍스트에서 사용할 수 있습니다. –

+1

C가 태그 지정을해야한다는 것을 의미하지는 않습니다. 어쨌든, 이제 새 태그가 있습니다. 태그 설명을 채울 수 있도록 참조 설명서에 친절하게 링크 할 수 있다면 멋질 것입니다. – StoryTeller

답변

0

foreach에서 사용자는 array의 첫 번째 요소와 비교합니다. 다른 요소의 경우 if 조건이 실패하고 계속 myList에 추가됩니다. pusharray 외부 foreach 블록으로 보내야합니다.

unique이라는 임시 var를 사용하여 push을 트리거 할 수 있습니다.

f[]@myList; // create list attribut 
float pavW = 0.0; 
for (int i = 1; i < 11; i++) 
{ 
    string path = "widthPav" + itoa(i); 
    pavW = ch(path); // take the value in the specific channel 
    if (i == 1) 
    { 
     push(@myList, pavW); //add new component of value to myList 
    } 
    if (pavW > 0) 
    { 
     int unique = 0; 
     foreach (float value; @myList) 
     { 
      unique = 1; 
      if (pavW == value) 
      { 
       unique = 0; 
       break; 
      } 
     } 
     if (unique) 
      push(@myList, pavW); //add new component... 
    } 
} 

제안 :

  • 당신은 foreach에 인덱스가 필요하지 않습니다.
  • 이러한 종류의 작업을 수행하려면 예비 매개 변수를 만들고 Python 표현식을 추가하여 고유 한 widthPav 매개 변수 목록을 가져 오기 만하면됩니다.

간단한 Python 조각은 :

node = hou.pwd() 
parmsUniqueValue = [] 

[parmsUniqueValue.append(parm.eval()) for parm in node.parms() if parm.name().startswith('widthPav') if parm.eval() not in parmsUniqueValue]