FineKernelToolKit 4.2.13
|
ソリッドモデル形状変換クラス [詳解]
#include <CLI/FK_CLI/include/SolidBase_CLI.h>
公開メンバ関数 | |
void | MakeIFSet (int faceNum, int polyNum, IEnumerable< int >^ IFSet, int vertexNum, IEnumerable< fk_Vector^>^ posArray, int order) |
任意形状生成メソッド1-1 | |
void | MakeIFSet (int faceNum, int polyNum, IEnumerable< int >^ IFSet, int vertexNum, IEnumerable< fk_Vector^>^ posArray) |
任意形状生成メソッド1-2 | |
void | MakeIFSet (IEnumerable< IEnumerable< int >^ >^ faceArray, IEnumerable< fk_Vector^>^ posArray, int order) |
任意形状生成メソッド2-1 | |
void | MakeIFSet (IEnumerable< IEnumerable< int >^ >^ faceArray, IEnumerable< fk_Vector^>^ posArray) |
任意形状生成メソッド2-2 | |
![]() | |
fk_Loop ^ | RemoveVertexInLoop (fk_Vertex ^ V) |
頂点削除メソッド | |
bool | ContractEdge (fk_Edge ^ E, bool R) |
稜線削除メソッド1-1 | |
bool | ContractEdge (fk_Edge ^ E) |
稜線削除メソッド1-2 | |
bool | ContractEdge (fk_Edge ^ E, fk_Vector ^ P, bool R) |
稜線削除メソッド2-1 | |
bool | ContractEdge (fk_Edge ^ E, fk_Vector ^ P) |
稜線削除メソッド2-2 | |
bool | CheckContract (fk_Edge ^ E) |
稜線削除可能判定メソッド | |
fk_Loop ^ | MakePolygon (IEnumerable< fk_Vector^>^ array, bool openFlg, bool initFlg) |
多角形生成メソッド1 | |
fk_Loop ^ | MakePolygon (IEnumerable< fk_Vector^>^ array, bool openFlg) |
多角形生成メソッド2 | |
fk_Loop ^ | PushPolygon (IEnumerable< fk_Vector^>^ array, bool openFlg) |
多角形追加メソッド1 | |
fk_Loop ^ | PushPolygon (IEnumerable< fk_Vector^>^ array) |
多角形追加メソッド2 | |
void | PushPolygonVertex (fk_Vector ^ pos, bool openFlg) |
多角形頂点追加メソッド | |
void | MakePoint (IEnumerable< fk_Vector^>^ array) |
頂点群生成メソッド | |
fk_Vertex ^ | PushPointVertex (fk_Vector ^ pos) |
頂点追加メソッド | |
void | MakeLines (IEnumerable< fk_Vector^>^ array) |
線分群生成メソッド | |
fk_Edge ^ | PushLines (fk_Vector ^ pos1, fk_Vector ^ pos2) |
線分追加メソッド | |
bool | SetLinePos (int ID, fk_Vector ^ pos) |
線分頂点移動メソッド1 | |
bool | SetLinePos (int edgeID, int vertexID, fk_Vector^ pos) |
線分頂点移動メソッド2 | |
bool | ChangeLine (int edgeID, fk_Vector^ pos1, fk_Vector^ pos2) |
線分両端点移動メソッド | |
void | MakeBlock (double x, double y, double z) |
直方体生成メソッド | |
void | SetBlockSize (double x, double y, double z) |
直方体辺長変更メソッド | |
void | SetBlockSize (double length, fk_Axis axis) |
直方体個別辺長設定メソッド | |
void | SetBlockScale (double scale) |
直方体全体拡大縮小メソッド | |
void | SetBlockScale (double scale, fk_Axis axis) |
直方体軸方向拡大縮小メソッド | |
void | SetBlockScale (double x, double y, double z) |
直方体軸方向個別拡大縮小メソッド | |
void | MakeCircle (int div, double rad) |
円形状生成メソッド | |
void | SetCircleRadius (double rad) |
円形状半径設定メソッド | |
void | SetCircleDivide (int div) |
円形状分割数設定メソッド | |
void | SetCircleScale (double scale) |
円形状拡大縮小メソッド | |
void | MakeSphere (int div, double rad) |
球形状生成メソッド | |
void | SetSphereRadius (double rad) |
球形状半径設定メソッド | |
void | SetSphereDivide (int div) |
球形状分割数設定メソッド | |
void | SetSphereScale (double scale) |
球形状拡大縮小メソッド | |
void | MakePrism (int div, double top, double bottom, double height) |
正多角柱(円柱)形状生成メソッド | |
void | SetPrismDivide (int div) |
正多角柱(円柱)角数設定メソッド | |
void | SetPrismTopRadius (double top) |
正多角柱(円柱)上面半径設定メソッド | |
void | SetPrismBottomRadius (double bottom) |
正多角柱(円柱)角数設定メソッド | |
void | SetPrismHeight (double height) |
正多角柱(円柱)高さ設定メソッド | |
void | MakeCone (int div, double rad, double height) |
正多角錐(円錐)形状生成メソッド | |
void | SetConeDivide (int div) |
正多角錐(円錐)角数設定メソッド | |
void | SetConeRadius (double rad) |
正多角錐(円錐)底面半径設定メソッド | |
void | SetConeHeight (double height) |
正多角錐(円錐)高さ設定メソッド | |
bool | MoveVPosition (int vertexID, fk_Vector ^ pos, int order) |
頂点移動メソッド1-1 | |
bool | MoveVPosition (int vertexID, fk_Vector ^ pos) |
頂点移動メソッド1-2 | |
bool | MoveVPosition (int vertexID, double x, double y, double z, int order) |
頂点移動メソッド2-1 | |
bool | MoveVPosition (int vertexID, double x, double y, double z) |
頂点移動メソッド2-2 | |
void | SubDivShape (int count) |
細分割曲面生成メソッド | |
![]() | |
fk_Vertex ^ | MakeVertex (fk_Vector^ P) |
頂点生成メソッド | |
bool | DeleteVertex (fk_Vertex^ V) |
頂点削除メソッド | |
bool | MoveVertex (fk_Vertex^ V, fk_Vector^ P) |
頂点移動メソッド | |
fk_Edge ^ | MakeEdge (fk_Vertex^ V_1, fk_Vertex^ V_2, fk_Half^ H_11, fk_Half^ H_12, fk_Half^ H_21, fk_Half^ H_22) |
稜線生成メソッド1 | |
fk_Edge ^ | MakeEdge (fk_Vertex^ V_1, fk_Vertex^ V_2) |
稜線生成メソッド2 | |
bool | DeleteEdge (fk_Edge^ E) |
稜線削除メソッド | |
fk_Loop ^ | MakeLoop (fk_Half ^ H) |
ループ生成メソッド | |
bool | DeleteLoop (fk_Loop^ L) |
ループ削除メソッド | |
fk_Edge ^ | SeparateLoop (fk_Half^ H1, fk_Half^ H2) |
ループ分割メソッド | |
bool | UniteLoop (fk_Edge^ E) |
ループ結合メソッド | |
fk_Vertex ^ | SeparateEdge (fk_Edge^ E) |
稜線分離メソッド | |
bool | UniteEdge (fk_Vertex^ V) |
稜線結合メソッド | |
void | NegateBody (void) |
形状反転メソッド | |
void | SetHistoryMark (void) |
履歴マーク設定メソッド | |
bool | UndoHistory (void) |
UNDO 操作実行メソッド | |
bool | RedoHistory (void) |
REDO 操作実行メソッド | |
![]() | |
bool | CheckDB (void) |
データベース設定チェックメソッド | |
bool | CheckTopology (void) |
位相状況チェックメソッド | |
bool | ExistVertex (fk_Vertex^ vertex) |
頂点位相要素存在判定メソッド1 | |
bool | ExistVertex (int ID) |
頂点位相要素存在判定メソッド2 | |
bool | ExistHalf (fk_Half^ half) |
半稜線位相要素存在判定メソッド1 | |
bool | ExistHalf (int ID) |
半稜線位相要素存在判定メソッド2 | |
bool | ExistEdge (fk_Edge^ edge) |
稜線位相要素存在判定メソッド1 | |
bool | ExistEdge (int ID) |
稜線位相要素存在判定メソッド2 | |
bool | ExistLoop (fk_Loop^ loop) |
ループ位相要素存在判定メソッド1 | |
bool | ExistLoop (int ID) |
ループ位相要素存在判定メソッド2 | |
fk_Vertex ^ | GetVData (int ID) |
頂点位相要素参照メソッド | |
fk_Half ^ | GetHData (int ID) |
半稜線位相要素参照メソッド | |
fk_Edge ^ | GetEData (int ID) |
稜線位相要素参照メソッド | |
fk_Loop ^ | GetLData (int ID) |
ループ位相要素参照メソッド | |
fk_Vertex ^ | GetNextV (fk_Vertex^ vertex) |
頂点位相要素逐次参照メソッド | |
fk_Half ^ | GetNextH (fk_Half^ half) |
半稜線位相要素逐次参照メソッド | |
fk_Edge ^ | GetNextE (fk_Edge^ edge) |
稜線位相要素逐次参照メソッド | |
fk_Loop ^ | GetNextL (fk_Loop^ loop) |
ループ位相要素逐次参照メソッド | |
fk_Vertex ^ | GetLastV (void) |
頂点位相最終要素参照メソッド | |
fk_Half ^ | GetLastH (void) |
半稜線位相最終要素参照メソッド | |
fk_Edge ^ | GetLastE (void) |
稜線位相最終要素参照メソッド | |
fk_Loop ^ | GetLastL (void) |
ループ位相最終要素参照メソッド | |
cli::array< fk_Vertex^> ^ | GetVertexArray (void) |
頂点コンテナ取得メソッド | |
cli::array< fk_Half^> ^ | GetHalfArray (void) |
半稜線コンテナ取得メソッド | |
cli::array< fk_Edge^> ^ | GetEdgeArray (void) |
稜線コンテナ取得メソッド | |
cli::array< fk_Loop^> ^ | GetLoopArray (void) |
ループコンテナ取得メソッド | |
![]() | |
fk_Half ^ | GetOneHOnV (fk_Vertex^ V) |
頂点接続半稜線参照メソッド | |
fk_Edge ^ | GetOneEOnV (fk_Vertex^ V) |
頂点接続稜線参照メソッド | |
fk_Vertex ^ | GetOneNeighborVOnV (fk_Vertex^ V) |
隣接頂点参照メソッド | |
cli::array< fk_Half^> ^ | GetAllHOnV (fk_Vertex^ V) |
頂点接続全半稜線参照メソッド | |
cli::array< fk_Edge^> ^ | GetAllEOnV (fk_Vertex^ V) |
頂点接続全稜線参照メソッド | |
cli::array< fk_Loop^> ^ | GetAllLOnV (fk_Vertex^ V) |
頂点接続全ループ参照メソッド | |
int | GetENumOnV (fk_Vertex^ V) |
頂点接続稜線数参照メソッド | |
cli::array< fk_Vertex^> ^ | GetAllNeighborVOnV (fk_Vertex^ V) |
全隣接頂点参照メソッド | |
cli::array< fk_Edge^> ^ | GetEOnVV (fk_Vertex^ V1, fk_Vertex^ V2) |
頂点間稜線参照メソッド | |
fk_Loop ^ | GetOneLOnV (fk_Vertex^ V) |
頂点接続ループ参照メソッド | |
fk_Vertex ^ | GetVOnH (fk_Half^ H) |
半稜線接続頂点参照メソッド | |
fk_Half ^ | GetMateHOnH (fk_Half^ H) |
対半稜線参照メソッド | |
fk_Edge ^ | GetParentEOnH (fk_Half^ H) |
親稜線参照メソッド | |
fk_Loop ^ | GetParentLOnH (fk_Half^ H) |
親ループ参照メソッド | |
fk_Vertex ^ | GetRightVOnE (fk_Edge^ E) |
右側頂点参照メソッド | |
fk_Vertex ^ | GetLeftVOnE (fk_Edge^ E) |
左側頂点参照メソッド | |
fk_Half ^ | GetRightHOnE (fk_Edge^ E) |
右側半稜線参照メソッド | |
fk_Half ^ | GetLeftHOnE (fk_Edge^ E) |
左側半稜線参照メソッド | |
fk_Loop ^ | GetRightLOnE (fk_Edge^ E) |
右側ループ参照メソッド | |
fk_Loop ^ | GetLeftLOnE (fk_Edge^ E) |
左側ループ参照メソッド | |
fk_EdgeStatus | GetEdgeStatus (fk_Edge^ E) |
稜線位相状態参照メソッド | |
fk_Vertex ^ | GetOneVOnL (fk_Loop^ L) |
ループ所属頂点参照メソッド | |
fk_Half ^ | GetOneHOnL (fk_Loop^ L) |
ループ所属半稜線参照メソッド | |
fk_Edge ^ | GetOneEOnL (fk_Loop^ L) |
ループ所属稜線参照メソッド | |
cli::array< fk_Vertex^> ^ | GetAllVOnL (fk_Loop^ L) |
ループ所属全頂点参照メソッド | |
cli::array< fk_Half^> ^ | GetAllHOnL (fk_Loop^ L) |
ループ所属全半稜線参照メソッド | |
cli::array< fk_Edge^> ^ | GetAllEOnL (fk_Loop^ L) |
ループ所属全稜線参照メソッド | |
fk_Loop ^ | GetOneNeighborLOnL (fk_Loop^ L) |
隣接ループ参照メソッド | |
fk_Loop ^ | GetNeighborLOnLH (fk_Loop^ L, fk_Half^ H) |
半稜線条件付き隣接ループ参照メソッド | |
int | GetVNumOnL (fk_Loop^ L) |
ループ上頂点数参照メソッド | |
fk_Loop ^ | GetNeighborLOnLE (fk_Loop^ L, fk_Edge^ E) |
稜線条件付き隣接ループ参照メソッド | |
cli::array< fk_Loop^> ^ | GetAllNeighborLOnL (fk_Loop^ L) |
全隣接ループ参照メソッド | |
![]() | |
void | SetShaderAttribute (String^ name, int dim, IEnumerable< int >^ array) |
シェーダー内 attribute 変数設定メソッド1 | |
void | SetShaderAttribute (String^ name, int dim, IEnumerable< float >^ array) |
シェーダー内 attribute 変数設定メソッド2 | |
void | SetShaderAttribute (String^ name, int dim, IEnumerable< double >^ array) |
シェーダー内 attribute 変数設定メソッド3 | |
void | SetShaderAttribute (String^ name, int dim, IEnumerable< fk_Vector^>^ array) |
シェーダー内 attribute 変数設定メソッド4 | |
void | SetShaderAttribute (String^ name, int dim, IEnumerable< fk_TexCoord^>^ array) |
シェーダー内 attribute 変数設定メソッド5 | |
void | SetShaderAttribute (String^ name, int dim, IEnumerable< fk_HVector^>^ array) |
シェーダー内 attribute 変数設定メソッド6 | |
![]() | |
bool | SetAttrII (int key, int value) |
キーが int 型、値が int 型である属性設定メソッド | |
bool | SetAttrID (int key, double value) |
キーが int 型、値が double 型である属性設定メソッド | |
bool | SetAttrIS (int key, String^ value) |
キーが int 型、値が String 型である属性設定メソッド | |
bool | SetAttrSI (String^ key, int value) |
キーが String 型、値が int 型である属性設定メソッド | |
bool | SetAttrSD (String^ key, double value) |
キーが String 型、値が double 型である属性設定メソッド | |
bool | SetAttrSS (String ^ key, String^ value) |
キーが String 型、値が String 型である属性設定メソッド | |
int | GetAttrII (int key) |
キーが int 型、値が int 型である属性参照メソッド | |
double | GetAttrID (int key) |
キーが int 型、値が double 型である属性参照メソッド | |
String ^ | GetAttrIS (int key) |
キーが int 型、値が String 型である属性参照メソッド | |
int | GetAttrSI (String^ key) |
キーが String 型、値が int 型である属性参照メソッド | |
double | GetAttrSD (String^ key) |
キーが String 型、値が double 型である属性参照メソッド | |
String ^ | GetAttrSS (String^ key) |
キーが String 型、値が String 型である属性参照メソッド | |
bool | ExistAttrII (int key) |
キーが int 型、値が int 型である属性存在参照メソッド | |
bool | ExistAttrID (int key) |
キーが int 型、値が double 型である属性存在参照メソッド | |
bool | ExistAttrIS (int key) |
キーが int 型、値が String 型である属性存在参照メソッド | |
bool | ExistAttrSI (String^ key) |
キーが String 型、値が int 型である属性存在参照メソッド | |
bool | ExistAttrSD (String^ key) |
キーが String 型、値が double 型である属性存在参照メソッド | |
bool | ExistAttrSS (String^ key) |
キーが String 型、値が String 型である属性存在参照メソッド | |
bool | DeleteAttrII (int key) |
キーが int 型、値が int 型である属性消去メソッド | |
bool | DeleteAttrID (int key) |
キーが int 型、値が double 型である属性消去メソッド | |
bool | DeleteAttrIS (int key) |
キーが int 型、値が String 型である属性消去メソッド | |
bool | DeleteAttrSI (String^ key) |
キーが String 型、値が int 型である属性消去メソッド | |
bool | DeleteAttrSD (String^ key) |
キーが String 型、値が double 型である属性消去メソッド | |
bool | DeleteAttrSS (String^ key) |
キーが String 型、値が String 型である属性消去メソッド | |
その他の継承メンバ | |
![]() | |
bool | HistoryMode [get, set] |
履歴保存モードプロパティ | |
bool | TesselateMode [get, set] |
形状全体テセレーションプロパティ | |
![]() | |
int | VNum [get] |
頂点数プロパティ | |
int | HNum [get] |
半稜線数プロパティ | |
int | ENum [get] |
稜線数プロパティ | |
int | LNum [get] |
ループ数プロパティ | |
![]() | |
fk_RealShapeType^ | RealShapeType [get] |
形状データ構造プロパティ | |
ソリッドモデル形状変換クラス
このクラスは、 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 と比較して描画速度は若干遅くなる、 メモリ使用量は若干増えるなどのデメリットがあります。
void FK_CLI::fk_SolidBase::MakeIFSet | ( | int | faceNum, |
int | polyNum, | ||
IEnumerable< int >^ | IFSet, | ||
int | vertexNum, | ||
IEnumerable< fk_Vector^>^ | posArray, | ||
int | order | ||
) |
任意形状生成メソッド1-1
与えられたIFSデータから、形状を生成します。 このメソッド形式の場合、全ての面が同じ角数である必要があります。 角数の異なる面が混在する形状を作成したい場合は、 MakeIFSet(IEnumerable< IEnumerable<int>^ >^, IEnumerable<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を補正するオーダー。通常は 0 を入力して下さい。 |
void FK_CLI::fk_SolidBase::MakeIFSet | ( | int | faceNum, |
int | polyNum, | ||
IEnumerable< int >^ | IFSet, | ||
int | vertexNum, | ||
IEnumerable< fk_Vector^>^ | posArray | ||
) |
任意形状生成メソッド1-2
与えられたIFSデータから、形状を生成します。 このメソッド形式の場合、全ての面が同じ角数である必要があります。 角数の異なる面が混在する形状を作成したい場合は、 MakeIFSet(IEnumerable< IEnumerable<int>^ >^, IEnumerable<fk_Vector^>^, int) を利用して下さい。
本メソッドは、 MakeIFSet(int, int, IEnumerable<int>^, int, IEnumerable<fk_Vector^>^, int) において、 第6引数に 0 を入力した場合と同義となります。
[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 | 頂点位置ベクトルの配列。配列の長さは頂点数以上である必要があります。 |
void FK_CLI::fk_SolidBase::MakeIFSet | ( | IEnumerable< IEnumerable< int >^ >^ | faceArray, |
IEnumerable< fk_Vector^>^ | posArray, | ||
int | order | ||
) |
任意形状生成メソッド2-1
与えられたIFSデータから、形状を生成します。
[in] | faceArray | 面データ配列。この配列は「ジャグ配列」となっており、 頂点IDの1次元配列が一つの面の頂点IDの集合となります。 この「頂点IDの1次元配列」の配列とすることで、 形状全体の位相情報を表します。 |
[in] | posArray | 頂点位置ベクトルデータ配列 |
[in] | order | 最初の頂点IDを補正するオーダー。通常は省略して問題ありません。 |
void FK_CLI::fk_SolidBase::MakeIFSet | ( | IEnumerable< IEnumerable< int >^ >^ | faceArray, |
IEnumerable< fk_Vector^>^ | posArray | ||
) |
任意形状生成メソッド2-2
与えられたIFSデータから、形状を生成します。 本メソッドは、 MakeIFSet(IEnumerable< IEnumerable<int>^ >^, IEnumerable<fk_Vector^>^, int) において、 第3引数の 0 を入力した場合と同義となります。
[in] | faceArray | 面データ配列。この配列は「ジャグ配列」となっており、 頂点IDの1次元配列が一つの面の頂点IDの集合となります。 この「頂点IDの1次元配列」の配列とすることで、 形状全体の位相情報を表します。 |
[in] | posArray | 頂点位置ベクトルデータ配列 |