曲線のパラメータ化
Revit API における曲線は、入力パラメータ「u」の数学的な関数として表すことができます。この場合、XYZ 空間の特定の点における曲線の位置は、「u」の関数となります。
曲線はバインドしたり、バインド解除したりできます。バインド解除された曲線は端点を持たず、無限抽象(バインド解除された線分)か循環曲線(円や楕円)のいずれかになります。
Revit では、パラメータ 「u」は次の 2 つの方法で表現することができます。
- 「正規化された」パラメータ。パラメータの開始値は 0.0 で、終了値は 1.0 です。いくつかのタイプの曲線では、その延長に沿った評価は非常に簡単になり、たとえば、線分の中点はパラメータ 0.5 になります(スプラインのようなより複雑な曲線の計算式では、このような前提が常に使用できるわけではないことに注意してください)。
- 「未加工」パラメータ。パラメータの開始値と終了値には任意の値を使用できます。特定の曲線の未加工パラメータの最小値と最大値は Curve.GetEndParameter(int)を使用して取得することができます。未加工パラメータの単位は Revit の既定の単位(フィート)と同じであるため便利です。つまり、開始値の未加工パラメータを取得してそれに 5 を加えると、始点から曲線に沿って 5 フィートの位置を取得することができます。また、バインド解除された曲線の評価に使用できるのは、未加工パラメータのみです。
メソッド Curve.ComputeNormalizedParameter()と Curve.ComputeRawParameter()は 2 つのパラメータ タイプ間で尺度を自動的に変更します。メソッド Curve.IsInside()は未加工パラメータを評価して、曲線のバインドの内部にあるかどうかを確認します。
パラメータを使用することで、次のような特定の位置にある曲線のさまざまなプロパティを評価することができます。
- 特定の曲線の XYZ 位置。Curve.Evaluate()によって返されます。未加工パラメータか正規化されたパラメータのいずれかを指定できます。また、ComputeDerivatives()を呼び出す場合は、そのメソッドが返す Transform の .Origin プロパティになります。
- 特定の曲線の最初の導関数ベクトル/接線ベクトル。これは、Curve.ComputeDerivatives()が返す Transform の .BasisX プロパティです。
- 特定の曲線の 2 番目の導関数ベクトル/法線ベクトル。これは、Curve.ComputeDerivatives()が返す Transform の .BasisY プロパティです。
- 特定の曲線の従法線ベクトル。接線ベクトルと法線ベクトルのクロス積として定義されます。これは、Curve.ComputeDerivatives()が返す Transform の .BasisZ プロパティです。
返されるベクトルはすべて正規化されません(ただし、Revit API では XYZ.Normalize()を使用することで任意のベクトルを正規化できます)。曲線が直線の場合は、法線ベクトルと従法線ベクトルの値セットはありませんので注意してください。接線ベクトルを使用すれば、特定の平面の直線に法線ベクトルを計算することができます。
API サンプル「DirectionCalculation」は壁の位置の曲線に対する接線ベクトルを使用して、南向きの外壁を見つけます。
南向きの外壁を検索してハイライト表示