particleObjectExt インタフェースは、パーティクル フロー Source クラスで公開されます。
プロパティ:
<PF_Source>.particleIndex : index : Read|Write|Validated by Range: 1 to 100000000
現在のパーティクル インデックスを取得/設定します。
<PF_Source>.particleID : index : Read|Write|Validated by Range: 1 to 100000000
現在のパーティクル ID を取得/設定します。
<PF_Source>. particleAge : time : Read|Write|Validated by Range: 0f to 625000f
現在のパーティクル エージを取得/設定します。
<PF_Source>. particleGroupTime : time : Read|Write|Validated by Range: 0f to 625000f
現在のパーティクルの Group Time を取得/設定します。
<PF_Source>.particlePosition : point3 : Read|Write
現在のパーティクルの位置を取得/設定します。
<PF_Source>. particleSpeed : point3 : Read|Write
現在のパーティクルの速度を取得/設定します。
<PF_Source>. particleOrientation : point3 : Read|Write
現在のパーティクルの方向を取得/設定します。
<PF_Source>. particleSpin : angleAxis : Read|Write
現在のパーティクルのスピンを取得/設定します。
<PF_Source>.particleScale : float : Read|Write|Validated by Range: 0.0 to 1e+009
現在のパーティクルのサイズを取得/設定します。
<PF_Source>.particleScaleXYZ : point3 : Read|Write
現在のパーティクルのスケールを Point3 値として取得/設定します。
<PF_Source>.particleTM : matrix3 : Read|Write
現在のパーティクルの変換行列を取得/設定します。
<PF_Source>.particleSelected : bool : Read|Write
現在のパーティクルの選択された状態を取得/設定します。
<PF_Source>.particleShape : mesh : Read|Write
現在のパーティクルのメッシュを取得/設定します。
例と結果:
|
--[作成]パネルから、シーンの既定値の PF Source を作成します。
--インタフェース プロパティをテストするための Source を名前で取得します。
pf = $'PF Source 01'
$PF_Source:PF Source 01 @ [2.536594,-48.031052,0.000000]
--現在のパーティクルのインデックスを取得します。
pf.particleIndex
1
--パーティクル インデックスを変更します。以降のプロパティは、
--すべてパーティクル 2 からになります。
pf.particleIndex = 2
2
--動作を確認します。
pf.particleIndex
2
--パーティクル 2 のパーティクル ID を取得します。
pf.particleID
0
--フレーム 0 のパーティクル エージを取得します。
--これは生まれたてのパーティクルで、エージは 0 です。
pf.particleAge
0f
--ここでシーンの時間をフレーム 10 に変更します。
sliderTime = 10
10
--...もう一度エージを取得してみます。
--10 フレーム後を取得すると、エージは 9.7 フレームになっています。
pf.particleAge
9.7f
--パーティクル 2 が選択されているかどうかを確認します。
--選択されていません。
pf.particleSelected
false
--[修正]パネルに変更します。
max modify mode
OK
--パーティクルのサブオブジェクト レベルに変更します。
subObjectLevel = 1
1
--パーティクル 2 を選択します。1 つのパーティクルは
--ビューポート内で赤に変わります。
pf.particleSelected = true
true
--パーティクルの位置を取得します。
pf.particlePosition
[12.1301,-40.7149,-96.9697]
--これは変更できます。
--パーティクルはそこに移動します。
pf.particlePosition = [10.0,-10.0,-40.0]
[10,-10,-40]
--パーティクル 2 の速度を取得します。
pf.particleSpeed
[0,0,-0.0625]
--パーティクル 2 の方向を取得します。
pf.particleOrientation
[-2.75317,-1.18547,-0.402363]
--パーティクル 2 のスピンを取得します。
pf.particleSpin
(angleAxis 0 [1,0,0])
--パーティクルのサイズを取得します。
pf.particleScale
16.3299
--パーティクルのスケールを取得します。
pf.particleScaleXYZ
[1,1,1]
--パーティクルの完全な TM を取得します。
pf.particleTM
(matrix3 [0.345842,-0.147184,0.926677] [-0.0394943,-0.989029,-0.142347] [0.937461,0.0126313,-0.34786] [12.1301,-40.7149,-96.9697])
--TriMesh のシェイプを取得します。
msh = pf.particleShape
TriMesh
--頂点の数を見てみます。
msh.numverts
4
--...次に面の数見てみます。
msh.numfaces
4
--実際の TriMesh を見てみましょう。
--新しい空の編集可能メッシュを作成します。
new_mesh = Editable_mesh()
$Editable_Mesh:Object01 @ [0.000000,0.000000,0.000000]
--シェイプのスナップショットをメッシュに割り当てます。
new_mesh.mesh = msh
TriMesh
--最後に編集可能メッシュのすべてのキャッシュを更新して、結果を確認します。
update new_mesh
OK
|
メソッド:
<void><PF_Source>.updateParticles <node>particleSystem <time>time
指定した時間にパーティクルを更新するように強制します。
<integer><PF_Source>.numParticles()
パーティクルの数を返します。
<integer><PF_Source>.numParticlesGenerated()
生成されたパーティクルの数を返します。
<void><PF_Source>.setEveryStepUpdateScriptLine <string>script
すべての更新ステップで実行されるようにスクリプト文字列を設定します。
<void><PF_Source>.setEveryStepUpdateScriptFile <filename>fileName
すべての更新ステップで実行されるようにスクリプト ファイルを設定します。
<void><PF_Source>.setFinalStepUpdateScriptLine <string>script
最後の更新ステップで実行されるようにスクリプト文字列を設定します。
<void><PF_Source>.setFinalStepUpdateScriptFile <filename>fileName
最後の更新ステップで実行されるようにスクリプト ファイルを設定します。
<time><PF_Source>.getUpdateTime()
現在の更新時間を返します。
<void><PF_Source>.getUpdateInterval <&time>timeStart <&time>timeEnd
timeStart is In and Out parameter
timeEnd is In and Out parameter
2 つの参照変数内の更新間隔を返します。
<index><PF_Source>.getParticleID <index>particleIndex
インデックスで指定されたパーティクルのパーティクル ID を返します。
<bool><PF_Source>.hasParticleID <index>particleBornIndex <&index>particleIndex
particleIndex is In and Out parameter
指定したパーティクル発生 ID を持つパーティクルが存在する場合、true を返します。指定した参照変数内にある実際のパーティクル インデックスを返します。
<node><PF_Source>.getParticleGroup <index>particleIndex
インデックスで指定されたパーティクル グループのノードを返します。
<index><PF_Source>.getParticleIndex <index>particleBornIndex
指定した発生インデックスを持つパーティクルのパーティクル インデックスを返します。
<time><PF_Source>.getParticleAge <index>particleIndex
インデックスで指定されたパーティクルのパーティクル エージを返します。
<time><PF_Source>.getParticleAgeByID <index>particleID
パーティクル ID によって指定されたパーティクルのパーティクル エージを返します。
<void><PF_Source>.setParticleAge <index>particleIndex <time>age
指定したインデックス指定のパーティクルのパーティクル エージを、指定したエージの値に設定します。
<void><PF_Source>.setParticleAgeByID <index>particleID <time>age
ID によって指定されたパーティクルのパーティクル エージを、指定したエージの値に設定します。
<time><PF_Source>.getParticleLifeSpan <index>particleIndex
指定したインデックス指定のパーティクルのスパン期間を返します。
<time><PF_Source>.getParticleLifeSpanByID <index>particleID
ID によって指定されたパーティクルのスパン期間を返します。
<void><PF_Source>.setParticleLifeSpan <index>particleIndex <time>lifeSpan
インデックスで指定されたパーティクルのスパン期間を、指定された[寿命]の値に設定します。
<void><PF_Source>.setParticleLifeSpanByID <index>particleID <time>lifeSpan
ID によって指定されたパーティクルのスパン期間を、指定された[寿命]の値に設定します。
<time><PF_Source>.getParticleGroupTime <index>particleIndex
インデックスで指定されたパーティクルの Group Time を返します。
<time><PF_Source>.getParticleGroupTimeByID <index>particleID
ID によって指定されたパーティクルの Group Time を返します。
<void><PF_Source>.setParticleGroupTime <index>particleIndex <time>age
インデックスで指定されたパーティクルの Group Time を、指定したエージの値に設定します。
<void><PF_Source>.setParticleGroupTimeByID <index>particleID <time>age
ID によって指定されたパーティクルの Group Time を、指定したエージの値に設定します。
<point3><PF_Source>.getParticlePosition <index>particleIndex
インデックスで指定されたパーティクルの位置を返します。
<point3><PF_Source>.getParticlePositionByID <index>particleID
ID によって指定されたパーティクルの位置を返します。
<void><PF_Source>.setParticlePosition <index>particleIndex <point3>position
インデックスで指定されたパーティクルの位置を、指定された Point3 型の値に設定します。
<void><PF_Source>.setParticlePositionByID <index>particleID <point3>position
ID で指定されたパーティクルの位置を、指定された Point3 型の値に設定します。
<point3><PF_Source>.getParticleSpeed <index>particleIndex
インデックスで指定されたパーティクルの速度を Point3 型の値として返します。
<point3><PF_Source>.getParticleSpeedByID <index>particleID
ID で指定されたパーティクルの速度を Point3 型の値として返します。
<void><PF_Source>.setParticleSpeed <index>particleIndex <point3>speed
インデックスで指定されたパーティクルの速度を、指定された Point3 型の値に設定します。
<void><PF_Source>.setParticleSpeedByID <index>particleID <point3>speed
ID で指定されたパーティクルの速度を、指定された Point3 型の値に設定します。
<point3><PF_Source>.getParticleOrientation <index>particleIndex
インデックスで指定されたパーティクルの方向を Point3 型の値として返します。
<point3><PF_Source>.getParticleOrientationByID <index>particleID
ID で指定されたパーティクルの方向を Point3 型の値として返します。
<void><PF_Source>.setParticleOrientation <index>particleIndex <point3>orientation
インデックスで指定されたパーティクルの方向を、指定された Point3 型の値に設定します。
<void><PF_Source>.setParticleOrientationByID <index>particleID <point3>orientation
ID で指定されたパーティクルの方向を、指定された Point3 型の値に設定します。
<angleAxis><PF_Source>.getParticleSpin <index>particleIndex
インデックスで指定されたパーティクルのスピンを angleAxis 値として返します。
<angleAxis><PF_Source>.getParticleSpinByID <index>particleID
ID で指定されたパーティクルのスピンを angleAxis 値として返します。
<void><PF_Source>.setParticleSpin <index>particleIndex <angleAxis>spin
インデックスで指定されたパーティクルのスピンを、指定した AngleAxis 値に設定します。
<void><PF_Source>.setParticleSpinByID <index>particleID <angleAxis>spin
ID によって指定されたパーティクルのパーティクルのスピンを、指定した angleAxis 値に設定します。
<float><PF_Source>.getParticleScale <index>particleIndex
インデックスで指定されたパーティクルのサイズを浮動小数点の値として返します。
<float><PF_Source>.getParticleScaleByID <index>particleID
ID で指定されたパーティクルのサイズを浮動小数点の値として返します。
<void><PF_Source>.setParticleScale <index>particleIndex <float>scale
インデックスで指定されたパーティクルのサイズを、指定した浮動小数点の値に設定します。
<void><PF_Source>.setParticleScaleByID <index>particleID <float>scale
ID によって指定されたパーティクルのパーティクルのサイズを、指定した浮動小数点の値に設定します。
<point3><PF_Source>.getParticleScaleXYZ <index>particleIndex
インデックスで指定されたパーティクルのスケールを Point3 型の値として返します。
<point3><PF_Source>.getParticleScaleXYZByID <index>particleID
ID で指定されたパーティクルのスケールを Point3 型の値として返します。
<void><PF_Source>.setParticleScaleXYZ <index>particleIndex <point3>scaleXYZ
インデックスで指定されたパーティクルのスケールを、指定された Point3 型の値に設定します。
<void><PF_Source>.setParticleScaleXYZByID <index>particleID <point3>scaleXYZ
ID で指定されたパーティクルのスケールを、指定された Point3 型の値に設定します。
<matrix3><PF_Source>.getParticleTM <index>particleIndex
インデックスで指定されたパーティクルの変換行列を返します。
<matrix3><PF_Source>.getParticleTMByID <index>particleID
ID によって指定されたパーティクルの変換行列を返します。
<void><PF_Source>.setParticleTM <index>particleIndex <matrix3>TM
インデックスで指定されたパーティクルの変換行列を設定します。
<void><PF_Source>.setParticleTMByID <index>particleID <matrix3>TM
ID によって指定されたパーティクルの変換行列を設定します。
<bool><PF_Source>.getParticleSelected <index>particleIndex
インデックスで指定されたパーティクルの選択された状態を返します。
<bool><PF_Source>.getParticleSelectedByID <index>particleID
ID によって指定されたパーティクルの選択された状態を返します。
<void><PF_Source>.setParticleSelected <index>particleIndex <bool>selected
インデックスで指定されたパーティクルの選択された状態を設定します。
<void><PF_Source>.setParticleSelectedByID <index>particleID <bool>selected
ID によって指定されたパーティクルの選択された状態を設定します。
<mesh><PF_Source>.getParticleShape <index>particleIndex
インデックスで指定されたパーティクルのシェイプをメッシュ値として返します。
<mesh><PF_Source>.getParticleShapeByID <index>particleID
ID で指定されたパーティクルのシェイプをメッシュ値として返します。
<void><PF_Source>.setParticleShape <index>particleIndex <mesh>shape
インデックスで指定されたパーティクルのシェイプを、指定したメッシュ値に設定します。
<void><PF_Source>.setParticleShapeByID <index>particleID <mesh>shape
ID によって指定されたパーティクルのパーティクルのシェイプを、指定したメッシュ値に設定します。
<void><PF_Source>.setShapeForAllParticles <mesh>shape
すべてのパーティクルのシェイプを、指定されたメッシュ値に設定します。
例と結果:
|
--ビューポート内に新しい パーティクル フロー Source を作成します。
--次に、それを名前によってシーンから取得します。
pf = $'PF Source 01'
$PF_Source:PF Source 01 @ [2.536594,-48.031052,0.000000]
--シーンの時間をフレーム 10 に設定します。
sliderTime = 10
10
--時間 10 のパーティクルを更新します。
pf.updateParticles pf 10f
OK
--現時点のパーティクルの総数を取得します。
pf.numParticles()
34
--現時点までに生成されたパーティクルの総数を取得します。
pf.numParticlesGenerated()
34
--パーティクルの更新時間を取得します。
pf.getUpdateTime()
10f
--2 つのユーザ変数を 0 に初期化します。
ts = te = 0
0
--シーンの時間をフレーム 10 に設定します。
sliderTime = 10f
10f
--参照渡しの変数に入れる更新間隔を取得します。
pf.getUpdateInterval &ts &te
OK
--開始時間をチェックします。
ts
9f
--終了時間をチェックします。
te
10f
pf.getParticleID 34--34番目のパーティクルのパーティクル ID を取得します。
34
--35 番目のパーティクルを取得してみます。
--パーティクルは 34 個しか存在しないので、ID は 0 になります。
pf.getParticleID 35
0
--参照に渡す変数を初期化します。
idx = 0
0
--ID が 34 であるパーティクルが存在するかどうかチェックします。
--存在しています。
pf.hasParticleID 34 &idx
true
--そのインデックスは 34 です。
idx
34
--同じことをパーティクル ID 35 についても調べてみます。
--こちらは存在していません。
pf.hasParticleID 35 &idx
false
--パーティクル グループのノードを取得します。
pf.getParticleGroup 2
$Particle_Group:PF Source 01->Event 01 @ [0.000000,0.000000,0.000000]
--パーティクル 34 のインデックスを取得します。
pf.getParticleIndex 34
34
--パーティクル 35 のインデックスを取得します。
--そのようなパーティクル ID は存在しないので、インデックスは 0 になります。
pf.getParticleIndex 35
0
--パーティクル 2 のパーティクル エージを取得します。
pf.getParticleAge 2
9.7f
--パーティクル ID 2 のパーティクル エージを取得します。
--同じパーティクルです。
pf.getParticleAgeByID 2
9.7f
--パーティクル 34 のパーティクル エージを取得します。
--これは後で発生したパーティクルなので、エージは小さくなります。
pf.getParticleAge 34
9f
--パーティクル 2 のエージを 5 つのフレームに設定します。
pf.setParticleAge 2 5f
OK
--動作しているかどうか確認します。動作していました。
pf.getParticleAge 2
5f
--パーティクル 2 のスパン期間を取得します。
--永久に存続させたいのはどれでしょうか。これです。
pf.getParticleLifeSpan 2
1.34218e+007f
--パーティクル 2 のスパン期間を変更します。
pf.setParticleLifeSpan 2 10f
OK
--再確認します。 変更されていました。
pf.getParticleLifeSpan 2
10f
--パーティクル 2 の Group Time を取得します。
pf.getParticleGroupTime 2
0f
&endash;-Set the Particle Group Time to 10
pf.setParticleGroupTime 2 10f
OK
--もう一度時間を取得します。設定されています。
pf.getParticleGroupTime 2
10f
--パーティクル 2 のメッシュを天球体に変更してみます。
gs = (geosphere radius:5).mesh
TriMesh
--表示をジオメトリに変更します。
pf.Event_01.Display_01.Type = 6
6
--パーティクル メッシュを設定します。
--1 つのパーティクルが天球体になっていました。
pf.setParticleShape 2 gs
OK
--ティーポットのメッシュを取得します。
tp = (teapot radius:5).mesh
TriMesh
--さらに、すべてのパーティクルに割り当てます。ティーポットに変わるはずです。
--さあ、お茶の時間です!
pf.setShapeForAllParticles tp
OK
|
このインタフェースは下記で使用できます。
PF_Source : GeometryClass
ParticleGroup : GeometryClass