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

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

#include <FK/ParticleSet.h>

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

公開メンバ関数

 fk_ParticleSet (unsigned int max=0)
 コンストラクタ
 
virtual ~fk_ParticleSet ()
 デストラクタ
 
void handle (void)
 実行関数
 
fk_ShapegetShape (void) const
 モデル設定用関数
 
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 setAllMode (bool mode)
 全体動作モード設定関数
 
bool getAllMode (void) const
 全体動作モード参照関数
 
void setIndivMode (bool mode)
 個別動作モード設定関数
 
bool getIndivMode (void) const
 個別動作モード参照関数
 
- 基底クラス FK::fk_BaseObject に属する継承公開メンバ関数
 fk_BaseObject (fk_Type type=fk_Type::BASEOBJECT)
 コンストラクタ
 
fk_Type getObjectType (void) const
 タイプ取得関数
 

公開変数類

std::function< void(fk_Particle *)> genMethod
 個別初期化用仮想関数
 
std::function< void(void)> allMethod
 全体動作用仮想関数
 
std::function< void(fk_Particle *)> indivMethod
 個別動作用仮想関数
 

詳解

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

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

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

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

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

参照
fk_Particle, fk_Point

構築子と解体子

◆ fk_ParticleSet()

FK::fk_ParticleSet::fk_ParticleSet ( unsigned int  max = 0)

コンストラクタ

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

引数
[in]maxパーティクル最大個数

◆ ~fk_ParticleSet()

virtual FK::fk_ParticleSet::~fk_ParticleSet ( )
virtual

デストラクタ

関数詳解

◆ handle()

void FK::fk_ParticleSet::handle ( void  )

実行関数

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

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

◆ getShape()

fk_Shape * FK::fk_ParticleSet::getShape ( void  ) const

モデル設定用関数

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

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

◆ newParticle() [1/3]

fk_Particle * FK::fk_ParticleSet::newParticle ( void  )

パーティクル生成関数1

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

戻り値
生成した場合、新たなパーティクルのインスタンスを返します。 失敗した場合は nullptr を返します。

◆ newParticle() [2/3]

fk_Particle * FK::fk_ParticleSet::newParticle ( const fk_Vector pos)

パーティクル生成関数2

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

引数
[in]pos生成場所の位置ベクトル
戻り値
生成した場合、新たなパーティクルのインスタンスを返します。 失敗した場合は nullptr を返します。

◆ newParticle() [3/3]

fk_Particle * FK::fk_ParticleSet::newParticle ( double  x,
double  y,
double  z 
)

パーティクル生成関数3

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

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

◆ removeParticle() [1/2]

bool FK::fk_ParticleSet::removeParticle ( fk_Particle p)

パーティクル削除関数1

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

引数
[in]p削除パーティクル
戻り値
削除に成功すれば true を、失敗すれば false を返します。

◆ removeParticle() [2/2]

bool FK::fk_ParticleSet::removeParticle ( int  ID)

パーティクル削除関数2

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

引数
[in]ID削除パーティクル ID
戻り値
削除に成功すれば true を、失敗すれば false を返します。

◆ getCount()

unsigned int FK::fk_ParticleSet::getCount ( void  ) const

年齢参照関数

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

戻り値
年齢

◆ getParticle()

fk_Particle * FK::fk_ParticleSet::getParticle ( int  ID) const

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

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

引数
[in]IDパーティクルID
戻り値
存在した場合はインスタンスを、存在しない場合は nullptr を返します。

◆ getNextParticle()

fk_Particle * FK::fk_ParticleSet::getNextParticle ( fk_Particle p) const

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

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

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

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

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

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

◆ getParticleNum()

unsigned int FK::fk_ParticleSet::getParticleNum ( void  ) const

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

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

戻り値
パーティクル個数

◆ setMaxSize()

void FK::fk_ParticleSet::setMaxSize ( unsigned int  max)

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

パーティクル集合における、パーティクル個数の最大値を設定します。 もし生存数がこの個数に達した場合、 newParticle() を呼び出しても生成を行いません。 0 の場合無制限となります。デフォルトは 0 です。

引数
[in]max最大個数

◆ getMaxSize()

unsigned int FK::fk_ParticleSet::getMaxSize ( void  ) const

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

パーティクル集合における、パーティクル個数の最大値を参照します。 もし生存数がこの個数に達した場合、 newParticle() を呼び出しても生成を行いません。 0 の場合無制限となります。デフォルトは 0 です。

戻り値
最大個数

◆ setAllMode()

void FK::fk_ParticleSet::setAllMode ( bool  mode)

全体動作モード設定関数

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

引数
[in]modetrue の場合は allMethod() の自動実行を行います。 false の場合は行いません。

◆ getAllMode()

bool FK::fk_ParticleSet::getAllMode ( void  ) const

全体動作モード参照関数

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

戻り値
true の場合は allMethod() の自動実行を行います。 false の場合は行いません。

◆ setIndivMode()

void FK::fk_ParticleSet::setIndivMode ( bool  mode)

個別動作モード設定関数

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

引数
[in]modetrue の場合は indivMethod() の自動実行を行います。 false の場合は行いません。

◆ getIndivMode()

bool FK::fk_ParticleSet::getIndivMode ( void  ) const

個別動作モード参照関数

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

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

メンバ詳解

◆ genMethod

std::function<void(fk_Particle *)> FK::fk_ParticleSet::genMethod

個別初期化用仮想関数

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

引数
[in]p新たに生成されたパーティクルインスタンス

◆ allMethod

std::function<void(void)> FK::fk_ParticleSet::allMethod

全体動作用仮想関数

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

◆ indivMethod

std::function<void(fk_Particle *)> FK::fk_ParticleSet::indivMethod

個別動作用仮想関数

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

引数
[in]p個別パーティクルインスタンス