Blender Sverchok Profile Parametricノード

Sverchok

はじめに

SVG記法が書けるノードがあるようなので調べてみた。

Sverchokて多機能だなぁ

参照元

github.com

Profile Parametric

現在は下記コマンドが利用可能

namecmdparameters意味
MoveToM, m{2v coordinate}指定した座標へ移動
LineToL, l({2v coordinate})+ [“n = ” num_segments] [z]– 現在のポイントから指定した座標へ線を引く
– num_segmentsの指定があれば、その数で細分化する
CurveToC, c({2v control1} {2v control2} {2v knot2})+ [“n = ” num_verts] [z]– control1 は始点の制御
– control2 は終点の制御
– knot2 は終点の座標
ArcToA, a{2v rx,ry} {float rot} {int flag1} {int flag2} {2v x,y} {int num_verts} [z]
HorLineTo ToH, h({x})+ [“n = ” num_segments] “;”x分平行線を描く
Vertical Line ToH, h({y})+ [“n =” num_segments] “;”y分垂直線を描く
SmoothCurveToS, s({2v control2} {2v knot2})+ [“n = ” num_verts] [z]
QuadCurveToQ,q({2v control} {2v knot2})+ [“n = ” num_segments] [z]
SmthQuadCurveT,t({2v knot2})+ [“n = ” num_segments] [z]
CloseXクローズする
ClosePathXクローズする
comment#must be first thing on the line, no trailing comment instructions.一行コメント
  • {}: 必須フィールド
  • [] : オプションのフィールド
  • 2v : 2点ベクトル a,b
    • , の間にスペース入れない
    • aとbは下記で記載できる
      • 数値
      • 変数
  • int : floatを入力してもintと解釈される。フラグとして入力刷る場合は0または1
  • [“n = ” num_verts] : カーブまたは線で使うコマンド、細分化する為に使用。
  • z : lineを閉じる為のオプション
  • X : 最後にedge を閉じる為コマンド(cyclic) [-1,0]
    • 最初と最後の頂点が座標空間を共有している場合、最後の頂点が除かれcycleが生成される
  • # : 一行コメント

大文字で始まるコマンド(M,L,C,A)はすべての座標を絶対モードで定義する。小文字で始まるコマンド(m,l,c,a)はすべての座標を相対モードを定義し、それぞれの座標は現在位置に関連している。

整数値や小数値は下記のように表される
– 5 や 7.5
– aやbのような変数名
– マイナス符号と変数名。例 -a や -size

リアルなSVGコマンドではArcToはつながったすべてのシーケンスを取りますが、このノードでは1つのArcを完成させるに十分なパラメータしか取りません。1つだけを取る事にした決定は主に可読性を維持する事です。

他の曲線セグメント(C/c, S/s, Q/q, T/t) ではSVGだけではなく、1つのコマンドで複数のセグメントが描画できます。しかし可読性の為、1つのセグメントに留める事をおすすめします。

注意 「default」と「let」は、事前に定義する変数、またはinputソケットに表示する変数として使用できます。

文の構文

プロファイル定義で使用される構文は、標準のPython構文です。つまり通常の数学演算(+,-,*,/,**は累乗)、数値、変数、括弧、及び関数呼び出し(sin(x)など)が使用できます。

参考: 標準のPython構文

Pythonとの違いは、限られたPythonの関数しか呼び出せない所です。

  • mathモジュールからの関数: acos, acosh, asin, asinh, atan, atan2
  • mathモジュールからの定数: pi, e
  • 追加の関数 abs
  • mathutilsモジュールから: Vector, Matrix

この制限はセキュリティ上の理由からです。

有効な式の例
– 1.0
– x
– {x + 1}
– {0.75 * X + 0.25 * Y}
– {R * sin(phi) }

入力

このノードの入力はプロファイル定義で使用される式に依存します。プロファイルで使用される各変数(「let」ステートメントで宣言されたものを除く)は1つの入力になります。プロファイルで変数が使用されていない場合、このノードには入力がありません。

パラメータ

  • Axis(軸) 利用可能な値はX,Y,X。このパラメータは曲線が生成される平面を指定する。例えばZのデフォルト値はすべてのポイントがXOY平面に属する事を意味する
    • XOY平面 = 常にZ=0のPlane
  • File name(ファイル名) blenderのテキストバッファーの名前。プロファイル説明を含む
  • Precision(精度) from selection操作によってプロファイルを作成する時に、小数点以下の桁数を指定するのに使う。初期値は8。Nパネルから変更可能


– Curve points count(カーブポイント数) 初期値は20。この値はNパネルから変更可能


– X command threshold(Xコマンドのしきい値) : このパラメータはXコマンドの機能 “remove doubles”の制御に使えます。もし最後と最初のポイントの距離がしきい値以内であればXコマンドは最後のポイントを削除し、最後の前のポイントと最初のポイントを接続します。

出力

  • Vertices 結果の曲線の頂点
  • Edges 結果の曲線の辺
  • Knots すべての曲線セグメントのknotポイント(C/c, S/s, Q/q, T/t コマンド)でプロファイル内で使用される
  • KnotNames すべてのKnotの名前。この出力はViewer Indexノードを使ってすべてのKnotを3DViewに表示する。これはプロファイルのデバッグに非常に有用

演算子

あなたが知っている通り、Blenderには3つのカーブがある。 Polylines, Bezier曲線そしてNURBS曲線。このノードは1つの操作ボタンがある from section 。この操作はBezier曲線のみで動作する。

アクティブな曲線オブジェクトを取り、そこからプロファイル説明を生成し、この生成したプロファイルを使用するためにノードを設定する。プロファイルはBlenderテキストバッファーの修正で調整可能。

もしあなたが他の曲線のタイプをインポートしたいなら、あなたはそれをBezier曲線に変換しなければならない。幸運にも Set Spline Typeボタンからそれが可能。変換に関するドキュメントはこちらから。

もしあなたがSVGパスについて経験があるなら多くは馴染みのあるものでしょう。最も大きな違いは LineToコマンドが多くのポイントを許容し、常にプロファイルの開始地点はMであるという事です。

M 0,0
L a,a b,0 c,0 d,d e,-e

これの面白いところはすべての頂点/コンポーネントが動的になれるということです。

M 0,0
L 0,3 2,3 2,4
C 2,5 2,5 3,5 n=10
L 5,5
C 7,5 7,5 7,3 n=10
L 7,2 5,0
X

または

M a,a
L a,b c,b -c,d
C c,e c,e b,e g 0
L e,e
C f,e f,e f,-b g 0
L f,c e,a
X

使用例

Q 3,H 6,0
t 6,0
t 6,0
t 0,-6
t -6,0
t -6,0
t -6,0
t 0,6

default straight_len = 1;
default radius = 0.4;
let rem = {radius / tan(phi/2)};
H straight_len ;
a radius,radius 0 0 1
{rem * (1 - cos(phi))}, {rem * sin(phi)}
n = 10
l {- straight_len * cos(phi)}, {straight_len * sin(phi)}

タイトルとURLをコピーしました