CurveDomainEvaluateCurveCurveDomain関数とEvaluateCurve関数で線のドメイン範囲と線上の点を取得することができます。
本記事のGrasshopperファイルのダウンロードはこちら

今回は、上の画像のように、取得した線のドメイン範囲を使い、線上の点を取得します。

使用コンポーネント 1: Python 3 Script 2: Curve 4: Point
import rhinoscriptsyntax as rs
# RhinoをPythonから操作するためのライブラリを読み込む
pts = [(0,0,0),(10,10,5),(20,0,10),(30,10,15),(40,0,20)]
# 曲線を通過させる複数の点座標を定義
curve = rs.AddInterpCurve(pts)
# 指定した点を通る曲線を作成する
domain = rs.CurveDomain(curve)
# 曲線のパラメータ範囲(ドメイン)を取得する
norm = 0.5
# 曲線上の位置を、0〜1の範囲で定義
# 0.5 は曲線全体の50%位置を表す
t = domain[0] + norm * (domain[1] - domain[0])
# 正規化した値を、実際の曲線パラメータ範囲へ変換する
point = rs.EvaluateCurve(curve, t)
# 指定したパラメータ位置の点座標を取得する「Python 3 Script」には、上記のコードが記載されています。
順番に、コードの解説をしていきます。
pts = [(0,0,0),(10,10,5),(20,0,10),(30,10,15),(40,0,20)]pts = [...] では、通過させる複数の点座標を、リストで定義しています。
後程、これらの座標をつなぐ曲線を作成します。
curve = rs.AddInterpCurve(pts)AddInterpCurve 関数で、先程指定した座標を通る曲線を作成しています。
domain = rs.CurveDomain(curve)CurveDomain 関数では、曲線のドメイン範囲(パラメータ範囲)を取得しています。
曲線内部では、位置が数値パラメータによって管理されています。
今回は、(0, 4) の範囲になっています。
norm = 0.5norm = 0.5 では、曲線上の位置を、0〜1の範囲で定義しています。
0→ 曲線の始点0.5→ 曲線の中央付近1→ 曲線の終点
という意味になります。
今回は 0.5 を指定しているため、曲線全体の50%の位置を取得しようとしています。
t = domain[0] + norm * (domain[1] - domain[0])0〜1で指定した割合を、実際の曲線パラメータ値へ変換しています。
この考えは、GrasshopperのReparameterizeと同じです。
例として、domain = (5.0, 15.0) のようなドメイン範囲があるとします(今回の曲線のドメイン範囲は(0, 4)なので、例とは異なります)。
これは、ドメイン範囲が、5〜15の範囲であることを意味しています。
実際の値を直接扱うと、t = 8.245 のようになり、直感的ではありません。
そこで、norm = 0.5 のように、0〜1の範囲で考えるようにします。
これにより、norm = 0.5 は、「50%位置」という意味になります。
しかし、EvaluateCurve 関数では、実際のドメイン範囲のパラメータ値が必要になります。
実際のパラメータ値に戻すための式が、 t = domain[0] + norm * (domain[1] - domain[0]) になります。
例えば、domain = (5.0, 15.0) とすると、
この範囲の最小値は 5 、最大値は 15 です。
範囲の長さは、15 - 5 = 10 になります。
もし、norm = 0.5 なら、「全体の50%位置」を求めたいことになります。
まず、norm * (domain[1] - domain[0]) を計算すると、0.5 * (15 - 5) = 5 になります 。
これは、「開始位置から5だけ進んだ位置」という意味です。
ただし、この 5 は「範囲内の移動量」でしかありません。
実際の値にするには、開始位置 5 を足す必要があります。
t = 5 + 5 = 10 になります。
つまり、t = domain[0] + norm * (domain[1] - domain[0]) は、「範囲の始点から、指定割合だけ進んだ位置」を求めている計算です。
point = rs.EvaluateCurve(curve, t)EvaluateCurve 関数で、指定したパラメータ位置の点座標を取得しています。
第1引数には線データ、第2引数にはパラメータ値を指定しています。
今回は、曲線全体の50%位置にある点を取得しています。
「Python 3 Script」の右側の端子名を「curve」に設定すると線データ、「point」に設定すると点データがGH上に出力されます。




Comment