はじめに
SVG記法が書けるノードがあるようなので調べてみた。
Sverchokて多機能だなぁ
参照元
Profile Parametric
現在は下記コマンドが利用可能
name | cmd | parameters | 意味 |
---|---|---|---|
MoveTo | M, m | {2v coordinate} | 指定した座標へ移動 |
LineTo | L, l | ({2v coordinate})+ [“n = ” num_segments] [z] | – 現在のポイントから指定した座標へ線を引く – num_segmentsの指定があれば、その数で細分化する |
CurveTo | C, c | ({2v control1} {2v control2} {2v knot2})+ [“n = ” num_verts] [z] | – control1 は始点の制御 – control2 は終点の制御 – knot2 は終点の座標 |
ArcTo | A, a | {2v rx,ry} {float rot} {int flag1} {int flag2} {2v x,y} {int num_verts} [z] | |
HorLineTo To | H, h | ({x})+ [“n = ” num_segments] “;” | x分平行線を描く |
Vertical Line To | H, h | ({y})+ [“n =” num_segments] “;” | y分垂直線を描く |
SmoothCurveTo | S, s | ({2v control2} {2v knot2})+ [“n = ” num_verts] [z] | |
QuadCurveTo | Q,q | ({2v control} {2v knot2})+ [“n = ” num_segments] [z] | |
SmthQuadCurve | T,t | ({2v knot2})+ [“n = ” num_segments] [z] | |
Close | X | クローズする | |
ClosePath | X | クローズする | |
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の関数しか呼び出せない所です。
- 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)}