FineKernelToolKit  3.1.0
公開メンバ関数 | プロパティ | 全メンバ一覧
FK_CLI::fk_ParticleSet クラス

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

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

公開メンバ関数

 fk_ParticleSet ()
 コンストラクタ [詳解]
 
 ~fk_ParticleSet ()
 デストラクタ [詳解]
 
 !fk_ParticleSet ()
 ファイナライザ [詳解]
 
void Handle (void)
 実行メソッド [詳解]
 
fk_ParticleNewParticle (void)
 パーティクル生成メソッド1 [詳解]
 
fk_ParticleNewParticle (fk_Vector^ pos)
 パーティクル生成メソッド2 [詳解]
 
fk_ParticleNewParticle (double x, double y, double z)
 パーティクル生成メソッド3 [詳解]
 
bool RemoveParticle (fk_Particle^ p)
 パーティクル削除メソッド1 [詳解]
 
bool RemoveParticle (int ID)
 パーティクル削除メソッド2 [詳解]
 
fk_ParticleGetParticle (int ID)
 パーティクルインスタンス参照メソッド [詳解]
 
fk_ParticleGetNextParticle (fk_Particle^ p)
 パーティクルインスタンス順次取得取得 [詳解]
 
void SetColorPalette (int ID, 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)
 個別動作用抽象メソッド [詳解]
 

プロパティ

fk_Shape^  Shape [get]
 モデル設定用プロパティ [詳解]
 
unsigned int Count [get]
 年齢プロパティ [詳解]
 
unsigned int ParticleNum [get]
 パーティクル個数プロパティ [詳解]
 
unsigned int MaxSize [get, set]
 パーティクル最大個数プロパティ [詳解]
 
bool AllMode [get, set]
 全体動作モードプロパティ [詳解]
 
bool IndivMode [get, set]
 個別動作モードプロパティ [詳解]
 

詳解

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

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

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

  1. まず fk_ParticleSet を継承したクラスを準備します。
  2. そのクラスで、各種抽象メソッドの上書きによってパーティクルの挙動を記述します。
  3. 新しいクラスのインスタンスを作成し、以下のようなコードでモデルに登録します。

     // fk_ParticleSet を継承した MyParticleSet クラスを事前に準備
     MyParticleSet   pSet = new MyParticleSet();
     fk_Model        mode = new fk_Model();
    
     model.Shape = pSet.Shape;
    

    もちろん、そのモデルはシーンに登録しておく必要があります。

  4. 描画ループの中で Handle() を呼び出す。

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

参照
fk_Particle, fk_Point

構築子と解体子

FK_CLI::fk_ParticleSet::fk_ParticleSet ( )

コンストラクタ

FK_CLI::fk_ParticleSet::~fk_ParticleSet ( )

デストラクタ

FK_CLI::fk_ParticleSet::!fk_ParticleSet ( )

ファイナライザ

関数詳解

void FK_CLI::fk_ParticleSet::Handle ( void  )

実行メソッド

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

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

パーティクル生成メソッド1

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

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

パーティクル生成メソッド2

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

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

パーティクル生成メソッド3

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

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

パーティクル削除メソッド1

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

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

パーティクル削除メソッド2

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

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

パーティクルインスタンス参照メソッド

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

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

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

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

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

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

void MyParticleSet::AllMethod(void)
{
    fk_Particle  p;
    fk_Vector    vec = new fk_Vector();

    p = GetNextParticle(null);
    while(p != null) {
        vec += p->GetPosition();
        p = GetNextParticle(p);
    }
    vec /= double(getParticleNum());
}
引数
[in]pパーティクルインスタンス
戻り値
上記解説を参照して下さい。
void FK_CLI::fk_ParticleSet::SetColorPalette ( int  ID,
fk_Color col 
)

カラーパレット設定1

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

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

カラーパレット設定2

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

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

カラーパレット設定3

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

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

個別初期化用抽象メソッド

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

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

全体動作用抽象メソッド

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

virtual void FK_CLI::fk_ParticleSet::IndivMethod ( fk_Particle p)
virtual

個別動作用抽象メソッド

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

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

プロパティ詳解

fk_Shape^ FK_CLI::fk_ParticleSet::Shape
get

モデル設定用プロパティ

モデルに形状を設定するためのプロパティです。

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

年齢プロパティ

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

覚え書き
個別のパーティクルで呼ばれた fk_Particle::Handle() はカウントしません。
unsigned int FK_CLI::fk_ParticleSet::ParticleNum
get

パーティクル個数プロパティ

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

unsigned int FK_CLI::fk_ParticleSet::MaxSize
getset

パーティクル最大個数プロパティ

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

bool FK_CLI::fk_ParticleSet::AllMode
getset

全体動作モードプロパティ

Handle() 呼び出し時の、 AllMethod() の自動実行を制御します。 true の場合は AllMethod() の自動実行を行います。 false の場合は行いません。 デフォルトでは true となっています。

bool FK_CLI::fk_ParticleSet::IndivMode
getset

個別動作モードプロパティ

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