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_Particle^ | NewParticle (void)
| パーティクル生成メソッド1 [詳解]
fk_Particle^ | NewParticle (fk_Vector^ pos)
| パーティクル生成メソッド2 [詳解]
fk_Particle^ | NewParticle (double x, double y, double z)
| パーティクル生成メソッド3 [詳解]
bool | RemoveParticle (fk_Particle^ p)
| パーティクル削除メソッド1 [詳解]
bool | RemoveParticle (int ID)
| パーティクル削除メソッド2 [詳解]
fk_Particle^ | GetParticle (int ID)
| パーティクルインスタンス参照メソッド [詳解]
fk_Particle^ | GetNextParticle (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_Particle や fk_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
| get set

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

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

bool FK_CLI::fk_ParticleSet::AllMode
| get set

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

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

bool FK_CLI::fk_ParticleSet::IndivMode
| get set

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

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