Teighaを使用すると、Teigha GeライブラリとそのクラスOdGeNurbCurve2dおよびOdGeNurbCurve3dを使用して、非一様有理Bスプライン(NURBS)曲線を作成できます。
曲線の3Dバージョンを考えてみましょう(2D曲線はすべて同じ動作をします)。NURBS曲線は、その次数、重み付き制御点のセット、およびノットベクトルによって定義されます。このデータは、コンストラクタを使用して曲線に設定できます。
OdGeNurbCurve3d(
int degree,
const OdGeKnotVector& knots,
const OdGePoint3dArray& controlPoints,
const OdGeDoubleArray& weights,
bool isPeriodic = false);
しかし、これはNURBSを記述する「コア」となる数学的データであり、必要な形状を作成するために直感的に使用することはできません。もう1つのオプションは、フィットデータを使用してNURBSを作成することです。これは、フィットデータを設定するコンストラクタです。
OdGeNurbCurve3d(
const OdGePoint3dArray& fitPoints,
const OdGeVector3d& startTangent,
const OdGeVector3d& endTangent,
bool startTangentDefined = true,
bool endTangentDefined = true,
const OdGeTol& fitTol = OdGeContext::gTol);
ここでは、曲線が通過する補間点であるフィットポイントを使用します。これは、フィットポイントが曲線上に存在することを意味します。次の図は、フィットポイントと制御点の違いを示しています。
開始および終了接線は、曲線の端点での接線を定義するベクトルです。対応するフラグを「false」に設定することで、これらを定義することはできません。フィット許容差は、曲線がフィットポイントから逸脱してもよい距離です。デフォルトではゼロであり、曲線はすべてのフィットポイントを正確に通過します。次の図は、これらのパラメータの影響を示しています。
終了接線が定義されていません
終了接線が定義されています
フィット許容差が定義されており、曲線はフィットポイントの「近く」を通過します
また、各フィットポイントで接線を定義するフィットポイントを持つNURBSを作成することもできます。次のコンストラクタを使用します。
OdGeNurbCurve3d(
const OdGePoint3dArray& fitPoints,
const OdGeVector3dArray& fitTangents,
const OdGeTol& fitTolerance = OdGeContext::gTol,
bool isPeriodic = false);
曲線が最初に制御点とノットを使用して作成された場合でも、フィットデータを作成して使用できます。関数buildFitDataを使用します。
データベースの目的で、OdDbSplineクラスを使用して3D NURBS曲線を表すこともできます。必要な形状のOdGeNurbCurve3d曲線を作成し、setFromOdGeCurveメソッドを使用してOdDbSplineクラスに設定できます。