2017-02-22 14 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」の要素の貴様が「はmyList」に「pavW」の値を追加したいを作成することです。 結果は例外ではありません。

+0

それはVEXスクリプト、3Dソフトウェアの独自の関連リンク言語です。それはCのように見えます。 @属性を作成することができますが、それは変数のようですが、3dコンテキストで使用することができます –

+1

Cのように見えるので、タグ付けする必要はありません。参照マニュアルに親切にリンクして、タグの説明に値を入れることができれば、それは素晴らしいものになるでしょう。 – StoryTeller

答えて

0

foreachの場合、最初の要素であるarrayと比較しています。他の要素については、ifの条件が満たされず、myListに追加され続けます。 pusharrayに、foreachブロックの外側に指定する必要があります。

uniqueという名前の一時的な変数を使用して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 parmのリストが表示されます。

シンプル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] 
関連する問題