すあまの備忘録

誰得内容の自分のための非営利目的備忘録ブログ(筆者がわかっても内緒にしてください)

Solaris - Instancer LOPあれこれメモ続き

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と一致しなくなる。