InstancerのIndexが9以上でずれる問題の無理やり回避方法のメモ。
※InstanceされるPointはSOPから読むこととする。
最初に
そもそもH19.5からCopy to Pointsのデフォルト値が変わっている。以前はここがint型variantだった。
nameをPoint Wrangleとかでランダムにバラして設定するのは割と面倒。
なので新しく追加されたMerge PackedとAttribute from Piecesを使用するのがいい。
で、この状態だとInstancerでnameにすれば基本的には大丈夫。
int型を使う
いままでのVariantを使用して0-9を超えると過去記事のようにindexがSolaris上でずれてしまう。 godofsuama.hatenablog.com
なのでSolaris上でnameで並んだ際にIndexがずれないようにpirm pathを整理する。
この部分でvariantのMaxをDetail AttributeにPromoteする。
conv_variant部分で以下VEXでを記述。このVEXで701以下までなら整数を英字に変換できる。 この処理はindexを数字のままではなくしたいときに便利。整理とか確認とか。
//max index is 701 int max = detail(1,"max"); int digitArray[]; int digitA = i@variant/26; int digitB = i@variant%26; int codepointA = digitA + 65; int codepointB = digitB + 65; if(max >= 25 ) { digitArray[0] = codepointA; digitArray[1] = codepointB; }else{ digitArray[0] = codepointB; } string encode = encodeutf8(digitArray); s@variantCode = encode;
こんな感じ。
これをnameにして書き出すとindexがずれづらいPrim Pathにすることができる。
InstancerをvariantにすればOK
注意
Point側にNとupを設定していないとSolaris上で勝手にNとupが設定されてSOPと一致しなくなる。