# クラス fk_ParticleSet

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

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

すべてのメンバ一覧

## Public メソッド
| fk_ParticleSet (unsigned int max=0)
| コンストラクタ
virtual | ~fk_ParticleSet ()
| デストラクタ
void | handle (void)
| 実行関数
fk_Shape * | getShape (void) const
| モデル設定用関数
## Protected メソッド
fk_Particle * | newParticle (void)
| パーティクル生成関数1
fk_Particle * | newParticle (const 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
unsigned int | getCount (void) const
| 年齢参照関数
fk_Particle * | getParticle (int ID) const
| パーティクルインスタンス参照関数
fk_Particle * | getNextParticle (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_Particle や fk_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 であることを前提とするような記述を行った場合、 将来のバージョンにおいて問題が生じる可能性があります。