FineKernelToolKit: FK::fk_Gregory クラス

FineKernelToolKit 4.3.0

読み取り中…
検索中…
一致する文字列を見つけられません
公開メンバ関数 | 全メンバ一覧
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 曲線により構成されています。

- fk_UV::U_S: u 方向 v 始点側曲線
- fk_UV::U_E: u 方向 v 終点側曲線
- fk_UV::V_S: v 方向 u 終点側曲線
- fk_UV::V_E: v 方向 u 終点側曲線

これらの境界線を構成する制御点を「境界制御点」と呼び、 図中の「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] | otherUV | surf 側の接続境界曲線を指定します。
  [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] | u | u パラメータ
  [in] | v | v パラメータ

戻り値
  曲面上の u 方向偏微分ベクトル

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

## ◆ vDeriv()

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

virtual

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

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

引数

  [in] | u | u パラメータ
  [in] | v | v パラメータ

戻り値
  曲面上の v 方向偏微分ベクトル

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