FineKernelToolKit  2.9.0
 全て クラス ネームスペース ファイル 関数 変数 型定義 列挙型 列挙型の値 フレンド マクロ定義 ページ
Public メソッド | Protected メソッド | すべてのメンバ一覧
クラス fk_ParticleSet

パーティクル集合を制御するクラス [詳細]

+ fk_ParticleSetに対する継承グラフ
+ fk_ParticleSetのコラボレーション図

Public メソッド

 fk_ParticleSet (unsigned int max=0)
 コンストラクタ [詳細]
 
virtual ~fk_ParticleSet ()
 デストラクタ [詳細]
 
void handle (void)
 実行関数 [詳細]
 
fk_ShapegetShape (void) const
 モデル設定用関数 [詳細]
 
- Public メソッド inherited from fk_BaseObject
 fk_BaseObject (fk_ObjectType type=FK_BASEOBJECT)
 コンストラクタ [詳細]
 
fk_ObjectType getObjectType (void) const
 タイプ取得関数 [詳細]
 

Protected メソッド

fk_ParticlenewParticle (void)
 パーティクル生成関数1 [詳細]
 
fk_ParticlenewParticle (const fk_Vector &pos)
 パーティクル生成関数2 [詳細]
 
fk_ParticlenewParticle (double x, double y, double z)
 パーティクル生成関数3 [詳細]
 
bool removeParticle (fk_Particle *p)
 パーティクル削除関数1 [詳細]
 
bool removeParticle (int ID)
 パーティクル削除関数2 [詳細]
 
unsigned int getCount (void) const
 年齢参照関数 [詳細]
 
fk_ParticlegetParticle (int ID) const
 パーティクルインスタンス参照関数 [詳細]
 
fk_ParticlegetNextParticle (fk_Particle *p) const
 パーティクルインスタンス順次取得取得 [詳細]
 
unsigned int getParticleNum (void) const
 パーティクル個数参照関数 [詳細]
 
void setMaxSize (unsigned int max)
 パーティクル最大個数設定関数 [詳細]
 
unsigned int getMaxSize (void) const
 パーティクル最大個数参照関数 [詳細]
 
void setColorPalette (int ID, const fk_Color &col)
 カラーパレット設定1 [詳細]
 
void setColorPalette (int ID, float R, float G, float B)
 カラーパレット設定2 [詳細]
 
void setColorPalette (int ID, double R, double G, double B)
 カラーパレット設定3 [詳細]
 
virtual void genMethod (fk_Particle *p)
 個別初期化用仮想関数 [詳細]
 
virtual void allMethod (void)
 全体動作用仮想関数 [詳細]
 
virtual void indivMethod (fk_Particle *p)
 個別動作用仮想関数 [詳細]
 
void setAllMode (bool mode)
 全体動作モード設定関数 [詳細]
 
bool getAllMode (void) const
 全体動作モード参照関数 [詳細]
 
void setIndivMode (bool mode)
 個別動作モード設定関数 [詳細]
 
bool getIndivMode (void) const
 個別動作モード参照関数 [詳細]
 

説明

パーティクル集合を制御するクラス

このクラスは、パーティクル集合を制御する機能を提供します。

「パーティクル」とは粒子のことで、流体表現などに利用します。 本クラスは、そのままインスタンスを生成して利用するのではなく、 このクラスの継承クラスに対して仮想関数を上書きして利用することを想定しています。 具体的には、以下のような手順となります。

  1. まず fk_ParticleSet を継承したクラスを準備します。
  2. そのクラスで、各種仮想関数の上書きによってパーティクルの挙動を記述します。
  3. 新しいクラスのインスタンスを作成し、 getShape() を使ってモデルに登録しておきます。 もちろん、そのモデルはシーンに登録しておく必要があります。
  4. 描画ループの中で handle() を呼び出す。

このクラスと同様に点群を扱うクラスとして、 fk_Point があります。 fk_Particlefk_ParticleSet が法則を記述することが主であることに対し、 fk_Point では点の制御をより直接的に行います。

参照
fk_Particle, fk_Point

コンストラクタとデストラクタ

fk_ParticleSet::fk_ParticleSet ( unsigned int  max = 0)

コンストラクタ

初期値として、パーティクル最大個数をとります。

引数
[in]maxパーティクル最大個数
virtual fk_ParticleSet::~fk_ParticleSet ( )
virtual

デストラクタ

関数

fk_Particle* fk_ParticleSet::newParticle ( void  )
protected

パーティクル生成関数1

パーティクルを原点上に新たに生成します。 ただし、既にパーティクル数が設定した最大値に達していた場合は、 生成を行いません。

戻り値
生成した場合、新たなパーティクルのインスタンスを返します。 失敗した場合は NULL を返します。
fk_Particle* fk_ParticleSet::newParticle ( const fk_Vector pos)
protected

パーティクル生成関数2

パーティクルを指定した位置ベクトルの場所に新たに生成します。 ただし、既にパーティクル数が設定した最大値に達していた場合は、 生成を行いません。

引数
[in]pos生成場所の位置ベクトル
戻り値
生成した場合、新たなパーティクルのインスタンスを返します。 失敗した場合は NULL を返します。
fk_Particle* fk_ParticleSet::newParticle ( double  x,
double  y,
double  z 
)
protected

パーティクル生成関数3

パーティクルを指定した位置ベクトルの場所に新たに生成します。 ただし、既にパーティクル数が設定した最大値に達していた場合は、 生成を行いません。

引数
[in]x生成場所の位置ベクトルのx成分
[in]y生成場所の位置ベクトルのy成分
[in]z生成場所の位置ベクトルのz成分
戻り値
生成した場合、新たなパーティクルのインスタンスを返します。 失敗した場合は NULL を返します。
bool fk_ParticleSet::removeParticle ( fk_Particle p)
protected

パーティクル削除関数1

指定したパーティクルを削除します。 削除したパーティクルが持っていた ID は、 新たに生成したパーティクルで再利用します。

引数
[in]p削除パーティクル
戻り値
削除に成功すれば true を、失敗すれば false を返します。
bool fk_ParticleSet::removeParticle ( int  ID)
protected

パーティクル削除関数2

指定した ID を持つパーティクルを削除します。 削除したパーティクルが持っていた ID は、 新たに生成したパーティクルで再利用します。

引数
[in]ID削除パーティクル ID
戻り値
削除に成功すれば true を、失敗すれば false を返します。
unsigned int fk_ParticleSet::getCount ( void  ) const
protected

年齢参照関数

パーティクル集合の年齢を参照します。 年齢とは、パーティクル集合が生成されてから handle() が呼ばれた回数のことです。

戻り値
年齢
fk_Particle* fk_ParticleSet::getParticle ( int  ID) const
protected

パーティクルインスタンス参照関数

指定した ID を持つパーティクルインスタンスを返します。

引数
[in]IDパーティクルID
戻り値
存在した場合はインスタンスを、存在しない場合は NULL を返します。
fk_Particle* fk_ParticleSet::getNextParticle ( fk_Particle p) const
protected

パーティクルインスタンス順次取得取得

存在しているパーティクルを順次取得するのに利用していきます。 引数と返値は、以下のような関係を持ちます。

  • 引数が NULL の場合は、IDが最も小さなパーティクルを返します。
  • 引数のパーティクルに対し、次の大きな ID を持つパーティクルを返します。
  • もし引数のパーティクルの ID が最大のものであった場合は、 MILL を返します。

以下のソースコードは、 allMethod() の中で全てのパーティクルの総和平均座標を求めているものです。 ここで、「MyPaticleSet」は fk_ParticleSet クラスを派生したものとします。

void MyParticleSet::allMethod(void)
{
    fk_Particle  *p;
    fk_Vector    vec(0.0, 0.0, 0.0);

    p = getNextParticle(NULL);
    while(p != NULL) {
        vec += p->getPosition();
        p = getNextParticle(p);
    }
    vec /= double(getParticleNum());
}
引数
[in]pパーティクルインスタンス
戻り値
上記解説を参照して下さい。
unsigned int fk_ParticleSet::getParticleNum ( void  ) const
protected

パーティクル個数参照関数

現在生存しているパーティクルの個数を返します。

戻り値
パーティクル個数
void fk_ParticleSet::setMaxSize ( unsigned int  max)
protected

パーティクル最大個数設定関数

パーティクル集合における、パーティクル個数の最大値を設定します。 もし生存数がこの個数に達した場合、 newParticle() を呼び出しても生成を行いません。

引数
[in]max最大個数
unsigned int fk_ParticleSet::getMaxSize ( void  ) const
protected

パーティクル最大個数参照関数

パーティクル集合における、パーティクル個数の最大値を参照します。 もし生存数がこの個数に達した場合、 newParticle() を呼び出しても生成を行いません。

戻り値
最大個数
void fk_ParticleSet::setColorPalette ( int  ID,
const fk_Color col 
)
protected

カラーパレット設定1

パーティクル集合内のカラーパレットに色を設定します。 ここで設定した色をパーティクルに反映するには、 fk_Particle::setColorID() を用います。

覚え書き
既にパーティクルに色 ID が設定されている状態で、 カラーパレット側の色を変更した場合、 パーティクルの色に即座に反映されます。
引数
[in]ID色ID
[in]col
void fk_ParticleSet::setColorPalette ( int  ID,
float  R,
float  G,
float  B 
)
protected

カラーパレット設定2

パーティクル集合内のカラーパレットに色を設定します。 色成分の最小値は 0、最大値は 1 です。 ここで設定した色をパーティクルに反映するには、 fk_Particle::setColorID() を用います。

覚え書き
既にパーティクルに色 ID が設定されている状態で、 カラーパレット側の色を変更した場合、 パーティクルの色に即座に反映されます。
引数
[in]ID色ID
[in]R色のR(赤)成分
[in]G色のG(緑)成分
[in]B色のB(青)成分
void fk_ParticleSet::setColorPalette ( int  ID,
double  R,
double  G,
double  B 
)
protected

カラーパレット設定3

パーティクル集合内のカラーパレットに色を設定します。 色成分の最小値は 0、最大値は 1 です。 ここで設定した色をパーティクルに反映するには、 fk_Particle::setColorID() を用います。

覚え書き
既にパーティクルに色 ID が設定されている状態で、 カラーパレット側の色を変更した場合、 パーティクルの色に即座に反映されます。
引数
[in]ID色ID
[in]R色のR(赤)成分
[in]G色のG(緑)成分
[in]B色のB(青)成分
virtual void fk_ParticleSet::genMethod ( fk_Particle p)
protectedvirtual

個別初期化用仮想関数

この関数は、 newParticle() によってパーティクルが生成されたときに、 自動的に実行されます。 初期状態としては特に何も行いませんが、 この関数を上書き定義することによって、 パーティクル生成時にそのパーティクルに対して様々な制御を行うことができます。

引数
[in]p新たに生成されたパーティクルインスタンス
virtual void fk_ParticleSet::allMethod ( void  )
protectedvirtual

全体動作用仮想関数

この関数は、 handle() が呼び出された時点で自動的に実行されます。 (ただし、 setAllMode() で false が設定されている場合は呼び出されません。) 初期状態としては何も行いませんが、 この関数を上書き定義することによって、 パーティクル集合に対して様々な制御を行うことができます。

virtual void fk_ParticleSet::indivMethod ( fk_Particle p)
protectedvirtual

個別動作用仮想関数

この関数は、 handle() が呼び出された時点で、 各パーティクル個別に自動的に実行されます。 (ただし、 setIndivMode() で false が設定されている場合は呼び出されません。) 初期状態としては何も行いませんが、 この関数を上書き定義することによって、 各パーティクルに対して様々な制御を行うことができます。

引数
[in]p個別パーティクルインスタンス
void fk_ParticleSet::setAllMode ( bool  mode)
protected

全体動作モード設定関数

handle() 呼び出し時の、 allMethod() の自動実行を制御します。 デフォルトでは true となっています。

引数
[in]modetrue の場合は allMethod() の自動実行を行います。 false の場合は行いません。
bool fk_ParticleSet::getAllMode ( void  ) const
protected

全体動作モード参照関数

handle() 呼び出し時の、 allMethod() の自動実行状態を参照します。

戻り値
true の場合は allMethod() の自動実行を行います。 false の場合は行いません。
void fk_ParticleSet::setIndivMode ( bool  mode)
protected

個別動作モード設定関数

handle() 呼び出し時の、 indivMethod() の自動実行を制御します。 デフォルトでは true となっています。

引数
[in]modetrue の場合は indivMethod() の自動実行を行います。 false の場合は行いません。
bool fk_ParticleSet::getIndivMode ( void  ) const
protected

個別動作モード参照関数

handle() 呼び出し時の、 indivMethod() の自動実行状態を参照します。

戻り値
true の場合は indivMethod() の自動実行を行います。 false の場合は行いません。
void fk_ParticleSet::handle ( void  )

実行関数

パーティクル集合および各パーティクルに対し、時間経過処理を実行します。 具体的には、以下の処理が行われます。

  • 各パーティクルの fk_Particle::handle() 実行。
  • パーティクル集合および各パーティクルの年齢に 1 を追加。
fk_Shape* fk_ParticleSet::getShape ( void  ) const

モデル設定用関数

モデルに形状を設定するための関数です。

戻り値
形状インスタンス
覚え書き
現時点では、この形状インスタンスの型は fk_Point になっています。 しかし、将来においてはこの型が変更となる可能性があります。 この関数で得られるインスタンスが fk_Point であることを前提とするような記述を行った場合、 将来のバージョンにおいて問題が生じる可能性があります。