FineKernelToolKit 4.2.13
読み取り中…
検索中…
一致する文字列を見つけられません
公開メンバ関数 | 全メンバ一覧
FK::fk_Gregory クラス

Gregory 曲面を生成、管理するクラス [詳解]

#include <FK/Gregory.h>

+ FK::fk_Gregory の継承関係図
+ FK::fk_Gregory 連携図

公開メンバ関数

 fk_Gregory (void)
 コンストラクタ
 
virtual ~fk_Gregory ()
 デストラクタ
 
void init (void)
 初期化用関数
 
bool setBoundary (fk_UV uv, int vID, const fk_Vector &pos)
 境界制御点設定関数
 
bool setDerivative (fk_UV uv, int vID, const fk_Vector &pos)
 流れベクトル制御点設定関数
 
fk_Vector getBoundary (fk_UV uv, int vID)
 境界制御点参照関数
 
fk_Vector getDerivative (fk_UV uv, int vID)
 流れベクトル制御点参照関数
 
void adjustDerivative (void)
 流れベクトル制御点自動設定関数
 
void adjustDerivative (fk_UV uv)
 境界別流れベクトル制御点自動設定関数
 
bool connect (fk_Gregory *surf, fk_UV thisUV, fk_UV otherUV, bool d, bool mode=false)
 隣接曲面G1連続接続関数
 
fk_Vector pos (double u, double v)
 曲面点算出関数
 
fk_Vector uDeriv (double u, double v)
 曲面 u 方向偏微分ベクトル算出関数
 
fk_Vector vDeriv (double u, double v)
 曲面 v 方向偏微分ベクトル算出関数
 
- 基底クラス FK::fk_Surface に属する継承公開メンバ関数
 fk_Surface (void)
 コンストラクタ
 
virtual ~fk_Surface ()
 デストラクタ
 
fk_Vector norm (double u, double v)
 
void setDiv (int div)
 曲面分割数設定関数
 
int getDiv (void)
 曲面分割数参照関数
 
int getCtrlSize (void)
 制御点数取得関数
 
- 基底クラス FK::fk_Shape に属する継承公開メンバ関数
 fk_Shape (fk_Type=fk_Type::SHAPE)
 コンストラクタ
 
virtual ~fk_Shape ()
 デストラクタ
 
fk_RealShapeType getRealShapeType (void)
 形状データ構造取得関数
 
void setShaderAttribute (std::string name, int dim, std::vector< int > *array, bool self=false)
 シェーダー内 attribute 変数設定関数1
 
void setShaderAttribute (std::string name, int dim, std::vector< float > *array, bool self=false)
 シェーダー内 attribute 変数設定関数2
 
void setShaderAttribute (std::string name, int dim, std::vector< fk_Vector > *array)
 シェーダー内 attribute 変数設定関数3
 
void setShaderAttribute (std::string name, int dim, std::vector< fk_TexCoord > *array)
 シェーダー内 attribute 変数設定関数4
 
void setShaderAttribute (std::string name, int dim, std::vector< fk_HVector > *array)
 シェーダー内 attribute 変数設定関数5
 
void modifyAttribute (std::string name)
 attribute 変数更新関数
 
- 基底クラス FK::fk_Attribute に属する継承公開メンバ関数
 fk_Attribute (void)
 コンストラクタ
 
virtual ~fk_Attribute ()
 デストラクタ
 
bool setAttrII (const int key, const int value)
 キーが int 型、値が int 型である属性設定関数
 
bool setAttrID (const int key, const double value)
 キーが int 型、値が double 型である属性設定関数
 
bool setAttrIS (const int key, const std::string value)
 キーが int 型、値が std::string 型である属性設定関数
 
bool setAttrSI (const std::string key, const int value)
 キーが std::string 型、値が int 型である属性設定関数
 
bool setAttrSD (const std::string key, const double value)
 キーが std::string 型、値が double 型である属性設定関数
 
bool setAttrSS (const std::string key, const std::string value)
 キーが std::string 型、値が std::string 型である属性設定関数
 
int getAttrII (const int key) const
 キーが int 型、値が int 型である属性参照関数
 
double getAttrID (const int key) const
 キーが int 型、値が double 型である属性参照関数
 
std::string getAttrIS (const int key) const
 キーが int 型、値が std::string 型である属性参照関数
 
int getAttrSI (const std::string key) const
 キーが std::string 型、値が int 型である属性参照関数
 
double getAttrSD (const std::string key) const
 キーが std::string 型、値が double 型である属性参照関数
 
std::string getAttrSS (const std::string key) const
 キーが std::string 型、値が std::string 型である属性参照関数
 
bool existAttrII (const int key) const
 キーが int 型、値が int 型である属性存在参照関数
 
bool existAttrID (const int key) const
 キーが int 型、値が double 型である属性存在参照関数
 
bool existAttrIS (const int key) const
 キーが int 型、値が std::string 型である属性存在参照関数
 
bool existAttrSI (const std::string key) const
 キーが std::string 型、値が int 型である属性存在参照関数
 
bool existAttrSD (const std::string key) const
 キーが std::string 型、値が double 型である属性存在参照関数
 
bool existAttrSS (const std::string key) const
 キーが std::string 型、値が std::string 型である属性存在参照関数
 
bool deleteAttrII (const int key)
 キーが int 型、値が int 型である属性消去関数
 
bool deleteAttrID (const int key)
 キーが int 型、値が double 型である属性消去関数
 
bool deleteAttrIS (const int key)
 キーが int 型、値が std::string 型である属性消去関数
 
bool deleteAttrSI (const std::string key)
 キーが std::string 型、値が int 型である属性消去関数
 
bool deleteAttrSD (const std::string key)
 キーが std::string 型、値が double 型である属性消去関数
 
bool deleteAttrSS (const std::string key)
 キーが std::string 型、値が std::string 型である属性消去関数
 
- 基底クラス FK::fk_BaseObject に属する継承公開メンバ関数
 fk_BaseObject (fk_Type type=fk_Type::BASEOBJECT)
 コンストラクタ
 
fk_Type getObjectType (void) const
 タイプ取得関数
 

その他の継承メンバ

- 基底クラス FK::fk_Surface に属する継承限定公開メンバ関数
bool setCtrl (int ID, fk_Vector *pos)
 制御点設定関数1
 
bool setCtrl (int ID, fk_Vector pos)
 制御点設定関数2
 
fk_Vector getCtrl (int ID)
 制御点取得関数
 
void setCtrlSize (int num)
 制御点最大サイズ設定関数
 
void setCtrlNum (int num)
 制御点数設定関数
 

詳解

Gregory 曲面を生成、管理するクラス

このクラスは、形状として Gregory 曲面を制御する機能を提供します。 u,v 両方向で 3 次式のみに対応しています。

Gregory 曲面の境界線や制御点は以下の図のような構成を持っています。

Gregory曲面の構成

以降、この図に基づいて各要素を解説していきます。

Gregory 曲面の境界は以下のような 4 本の 3 次 Bezier 曲線により構成されています。

これらの境界線を構成する制御点を「境界制御点」と呼び、 図中の「C」で構成されている制御点にあたります。 これらの点位置は setBoundary() で設定が可能で、 「曲線名」と「ID」によって指定します。 図中の境界制御点の一番目が曲線名、二番目が ID にあたります。 4隅の制御点については指定方法が 2 種類あります。 例えば、図の左上の制御点は setBoundary(fk_UV::U_E, 0, V) と setBoundary(fk_UV::V_S, 3, V) の両方の指定方法があります。

Gregory 曲面は境界制御点の他に、流れベクトルを制御する 「流れベクトル制御点」があり、図中の「D」で構成されている点にあたります。 これらの制御点の位置を変更しても境界線は変化しませんが、 曲面境界部分の流れベクトル(偏微分ベクトル)が変化します。 流れベクトルを適切に設定すると、 隣り合う曲面が境界部分で折れ曲がらず滑らかに接続することができます。

構築子と解体子

◆ fk_Gregory()

FK::fk_Gregory::fk_Gregory ( void  )

コンストラクタ

◆ ~fk_Gregory()

virtual FK::fk_Gregory::~fk_Gregory ( )
virtual

デストラクタ

関数詳解

◆ init()

void FK::fk_Gregory::init ( void  )

初期化用関数

この関数は、曲面を初期状態(全ての制御点が原点にある状態)にします。

◆ setBoundary()

bool FK::fk_Gregory::setBoundary ( fk_UV  uv,
int  vID,
const fk_Vector pos 
)

境界制御点設定関数

境界線の制御点位置ベクトルを設定します。

引数
[in]uv設定を行う境界線の種類
[in]vID制御点 ID。先頭は 0 になります。
[in]pos制御点位置ベクトル
戻り値
設定に成功した場合 true、失敗した場合 false を返します。

◆ setDerivative()

bool FK::fk_Gregory::setDerivative ( fk_UV  uv,
int  vID,
const fk_Vector pos 
)

流れベクトル制御点設定関数

流れベクトル制御点位置ベクトルを設定します。

引数
[in]uv設定を行う境界線の種類
[in]vID制御点 ID。1, 2 のいずれかになります。
[in]pos制御点位置ベクトル
戻り値
設定に成功した場合 true、失敗した場合 false を返します。

◆ getBoundary()

fk_Vector FK::fk_Gregory::getBoundary ( fk_UV  uv,
int  vID 
)

境界制御点参照関数

曲面の境界制御点位置ベクトルを参照します。

引数
[in]uv境界線種類
[in]vID制御点のv方向ID
戻り値
制御点位置ベクトル。IDが不正だった場合、零ベクトルを返します。

◆ getDerivative()

fk_Vector FK::fk_Gregory::getDerivative ( fk_UV  uv,
int  vID 
)

流れベクトル制御点参照関数

曲面の流れベクトル制御点位置ベクトルを参照します。

引数
[in]uv境界線種類
[in]vID制御点のv方向ID
戻り値
制御点位置ベクトル。IDが不正だった場合、零ベクトルを返します。

◆ adjustDerivative() [1/2]

void FK::fk_Gregory::adjustDerivative ( void  )

流れベクトル制御点自動設定関数

現在の境界曲線情報より、流れベクトル制御点を自動的に設定します。 このとき、内部制御点は境界上の流れベクトルが線形補間となるように設定されます。

参照
adjustDerivative(fk_UV), setBoundary(), setDerivative(), connect()

◆ adjustDerivative() [2/2]

void FK::fk_Gregory::adjustDerivative ( fk_UV  uv)

境界別流れベクトル制御点自動設定関数

特定の境界線に対し、現在の境界曲線情報より流れベクトル制御点を自動的に設定します。 このとき、流れベクトル制御点は境界上の流れベクトルが線形補間となるように設定されます。

引数
[in]uv指定する制御点に隣接する境界曲線を指定します。
参照
adjustDerivative(void), setBoundary(), setDerivative(), connect()

◆ connect()

bool FK::fk_Gregory::connect ( fk_Gregory surf,
fk_UV  thisUV,
fk_UV  otherUV,
bool  d,
bool  mode = false 
)

隣接曲面G1連続接続関数

隣接する曲面と G1 連続性を持つように制御点位置を移動します。 隣接する境界線のうち、両端点については一致している必要があります。 その他の制御点については、 surf 側の制御点に従って補正が行われます。

引数
[in]surf隣接曲面。 隣接している境界線の両端点が一致している必要があります。
[in]thisUV接続する境界曲線を指定します。
[in]otherUVsurf 側の接続境界曲線を指定します。
[in]d自身と surf の境界が同じ方向になる場合 true を、 逆方向になる場合 false を代入します。
[in]mode連続性を C1 とするか G1 とするかを設定します。 C1 連続とは、境界上の流れベクトルが全て連続であることです。 一方、G1 連続とは境界上の接平面が連続であることです。 G1 連続は必ずしも流れベクトルが連続である必要はありません。

true の場合、C1 連続性を持つように制御点を移動します。 false の場合、G1 連続性を持つように制御点を移動します。

戻り値
接続に成功した場合 true を、失敗した場合 false を返します。
参照
setBoundary(), setDerivative(), adjustDerivative(void), adjustDerivative(fk_UV)

◆ pos()

fk_Vector FK::fk_Gregory::pos ( double  u,
double  v 
)
virtual

曲面点算出関数

パラメータに対応する曲面上の点の位置ベクトルを返します。

引数
[in]u曲面の u パラメータ
[in]v曲面の v パラメータ
戻り値
曲面上の点の位置ベクトル

FK::fk_Surfaceを実装しています。

◆ uDeriv()

fk_Vector FK::fk_Gregory::uDeriv ( double  u,
double  v 
)
virtual

曲面 u 方向偏微分ベクトル算出関数

曲面上の u 方向偏微分ベクトルを算出する関数です。

引数
[in]uu パラメータ
[in]vv パラメータ
戻り値
曲面上の u 方向偏微分ベクトル

FK::fk_Surfaceを実装しています。

◆ vDeriv()

fk_Vector FK::fk_Gregory::vDeriv ( double  u,
double  v 
)
virtual

曲面 v 方向偏微分ベクトル算出関数

曲面上の v 方向偏微分ベクトルを算出する関数です。

引数
[in]uu パラメータ
[in]vv パラメータ
戻り値
曲面上の v 方向偏微分ベクトル

FK::fk_Surfaceを実装しています。