クラス fk_ParticleSet

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

fk_ParticleSetに対する継承グラフ
Inheritance graph
[凡例]
fk_ParticleSetのコラボレーション図
Collaboration graph
[凡例]

すべてのメンバ一覧

Public メソッド

 fk_ParticleSet (unsigned int max=0)
 コンストラクタ
virtual ~fk_ParticleSet ()
 デストラクタ
void handle (void)
 実行関数
fk_ShapegetShape (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  )  [protected, virtual]

個別初期化用仮想関数

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

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

全体動作用仮想関数

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

virtual void fk_ParticleSet::indivMethod ( fk_Particle p  )  [protected, virtual]

個別動作用仮想関数

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

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

全体動作モード設定関数

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

引数:
[in] mode true の場合は 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] mode true の場合は 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 であることを前提とするような記述を行った場合、 将来のバージョンにおいて問題が生じる可能性があります。

FineKernelToolKitに対してSat Sep 26 20:35:33 2009に生成されました。  doxygen 1.6.1