FineKernelToolKit
2.8.10
|
ソリッドモデル形状変換クラス [詳細]
Public メソッド | |
fk_SolidBase (void) | |
コンストラクタ | |
virtual | ~fk_SolidBase () |
デストラクタ | |
void | makeIFSet (int faceNum, int polyNum, int *IFSet, int vertexNum, fk_Vector *posArray, int order=0) |
任意形状生成関数1 | |
void | makeIFSet (std::vector< std::vector< int > > *faceArray, std::vector< fk_Vector > *posArray, int order=0) |
任意形状生成関数2 |
ソリッドモデル形状変換クラス
このクラスは、 fk_Solid クラスのインスタンスにおいて、 インデックスフェースセットによるデータ(以下「IFSデータ」) から形状を生成する機能を提供します。 IFSデータとは、位置ベクトルの配列からなる頂点データと、 頂点IDを格納した面データ集合の2つのデータから成る形状データです。
一般形状を表すクラスとして、 fk_Solid の他に fk_IndexFaceSet クラスがあります。 fk_IndexFaceSet クラスにも fk_IndexFaceSet::makeIFSet() 関数によって、 IFS データから形状を生成することが可能です。 ただし、 fk_IndexFaceSet においては面が3角形か4角形のみ (そして混在は不可)という制限があります。また、生成後の位相変化にも対応していません。 fk_Solid の場合、任意角数の多角形を混在して扱うことが可能であるため、 より表現力が高いと言えます。ただし、 fk_Solid は fk_IndexFaceSet と比較して描画速度は若干遅くなる、 メモリ使用量は若干増えるなどのデメリットがあります。
fk_SolidBase::fk_SolidBase | ( | void | ) |
コンストラクタ
virtual fk_SolidBase::~fk_SolidBase | ( | ) | [virtual] |
デストラクタ
void fk_SolidBase::makeIFSet | ( | int | faceNum, |
int | polyNum, | ||
int * | IFSet, | ||
int | vertexNum, | ||
fk_Vector * | posArray, | ||
int | order = 0 |
||
) |
任意形状生成関数1
与えられたIFSデータから、形状を生成します。 この関数形式の場合、全ての面が同じ角数である必要があります。 角数の異なる面が混在する形状を作成したい場合は、 makeIFSet(std::vector< std::vector<int> > *, std::vector<fk_Vector> *, int) を利用して下さい。
[in] | faceNum | 面数 |
[in] | polyNum | 面の角数。3以上の値を入力できます。 |
[in] | IFSet | インデックスフェースセット配列。 この配列は、各面を構成する頂点 ID を並べたものになります。 たとえば、頂点 ID が [0, 1, 2] と [2, 1, 3] という構成を持つ 2面からなる形状を生成する場合、 int 型の配列に対して [0, 1, 2, 2, 1, 3] という数値を入力しておきます。 結果的に、この配列の長さは面数と角数を 掛けたもの以上である必要があります。 |
[in] | vertexNum | 頂点数 |
[in] | posArray | 頂点位置ベクトルの配列。 配列の長さは頂点数以上である必要があります。 |
[in] | order | 最初の頂点IDを補正するオーダー。 通常は省略して問題ありません。 |
void fk_SolidBase::makeIFSet | ( | std::vector< std::vector< int > > * | faceArray, |
std::vector< fk_Vector > * | posArray, | ||
int | order = 0 |
||
) |
任意形状生成関数2
与えられたIFSデータから、形状を生成します。
[in] | faceArray | 面データ配列。 IFSet を vector< vector<int> > 型、 polygon を vector<int> 型としたとき、 以下のようにして面データを生成していきます。 polygon.clear(); polygon.push_back(頂点ID1); polygon.push_back(頂点ID2); : polygon.push_back(頂点IDn); IFSet.push_back(polygon); |
[in] | posArray | 頂点位置ベクトルデータ配列 |
[in] | order | 最初の頂点IDを補正するオーダー。 通常は省略して問題ありません。 |