オブジェクトをCopy to Pointする場合等に必要になるのが、ポリゴン(プリミティブ)の中心にポイントが追加したいということです。
結果としてはこのような感じですね。
ここでは3つの方法をご紹介します。
centroidを使用する
エクスプレッション関数である「centroid」を使用することでポリゴンの中心点を追加することができます。
centroid(surface_node, type)というように記述し、typeには重心のコンポーネントに対応するD_X、D_Y、D_Zのどれかを指定します。
ということで、Gridを作成し、その下にfor-each primitivesを追加します。
ポリゴンを1つ抽出したら、間にaddノードを追加。
オプションでpoint 0を有効にすると、(0,0,0)の位置にポイントが追加されます。
そこでcentroidを使用して、ポイントを重心に持ってきます。
左のボックスはXになるのでcentroid(opinputpath(".",0),D_X)と指定します。
opinputpathは指定したノードに何番目に入力されたのかを定義し、そのフルパスを得ることができます。
1番目の入力に接続されたノードのパスを取得するには、opinputpath(".", 0)
と指定することができます。
後はDeleteノードで必要のないポイントを削除すればポリゴンの重心にポイントを配置することができました。
Circleを使用する
もう少し簡単な方法があります。それはポリゴンをCircle(円)に変えて、その重心にポイントを作成する方法です。
今度はFor-each primitivesの中にConvertを設置し、Convert ToをCircleにします。
この時点でポリゴンはプリミティブの円に変換されます。
そこにaddノードを追加します。
その際にPoint0を有効にする必要はありません。円の中心にポイントが生成されます。
周りのポリゴンを消すには、Delete Gemetry But Keep Pointを有効にしてください。
これで各ポリゴンの中心にポイントを配置することができました。
VEXを使用する
Attribute Wrangleを追加し、Run OverをPrimitivesに変更します。
下記を追加します。
int newPt = addpoint(0, @P);
removeprim(0, @primnum, 1);