CurveのReparameterizeを暗黙的にする方法のメモ

C#

NURBSやベジェ曲線はパラメトリック曲線と呼ばれ,曲線上を動く点が存在する。なのでEvaluate Curve Componentなどをつかって,曲線上の点や接線を取りダウことができる。

数式的にはこのパラメータは0が曲線の始点,1が曲線の終点として定式化することが多い気がするのだけど、Grasshopper上ではこのパラメータは0.0 – 1.0に固定されているわけではない。

こんな感じで0.5を入れても、曲線の端っこの点が表示されてしまう…

これを解決するために、Reparameterizeという設定がある。これをするとこんな感じになる。

Grasshopperで他の人にghファイルを使ってもらうときにこういうインターフェイスはバグの温床になることもある。(というか複雑だと伝え忘れることも。)

なので、次のようにすれば、暗黙的にできる。

from ghpythonlib.componentbase import executingcomponent as component
import Grasshopper, GhPython
import System
import Rhino
import rhinoscriptsyntax as rs
import ghpythonlib.components as gh

class MyComponent(component):
    
    def RunScript(self, c, t):
        
        crv = gh.CurveDomain(c,gh.ConstructDomain(0.0,1.0)).curve
        ob = gh.EvaluateCurve(crv,t)
        P = ob.point
        T = ob.tangent
        A = ob.angle
        # return outputs if you have them; here I try it for you:
        return P,T,A

ちなみに、ソースコードにもあるように、CurveDomainというコンポーネントをつなげばPythonで書く必要もない。

なお、C#の場合はCurveオブジェクトのプロパティにDomainがあるので、

Curve crv = hogehoge;
crv.Domain = new Interval(0.0, 1.0);

とすればよい。

コメント

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