FineKernelToolKit 4.2.13
読み取り中…
検索中…
一致する文字列を見つけられません
公開メンバ関数 | 全メンバ一覧
FK::fk_SolidBase クラス

ソリッドモデル形状変換クラス [詳解]

#include <FK/SolidBase.h>

+ FK::fk_SolidBase の継承関係図
+ FK::fk_SolidBase 連携図

公開メンバ関数

 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::fk_Modify に属する継承公開メンバ関数
 fk_Modify (fk_DataBase *=nullptr)
 コンストラクタ
 
virtual ~fk_Modify ()
 デストラクタ
 
fk_LoopremoveVertexInLoop (fk_Vertex *V)
 頂点削除関数
 
bool contractEdge (fk_Edge *E, bool R=true)
 稜線削除関数1
 
bool contractEdge (fk_Edge *E, fk_Vector P, bool R=true)
 稜線削除関数2
 
bool checkContract (fk_Edge *E)
 稜線削除可能判定関数
 
fk_LoopmakePolygon (std::vector< fk_Vector > *array, bool openFlg, bool initFlg=true)
 多角形生成関数1
 
fk_LoopmakePolygon (int num, fk_Vector *array, bool openFlg, bool initFlg=true)
 多角形生成関数2
 
fk_LooppushPolygon (std::vector< fk_Vector > *array, bool openFlg=false)
 多角形追加関数1
 
fk_LooppushPolygon (int num, fk_Vector *array, bool openFlg=false)
 多角形追加関数2
 
void pushPolygonVertex (fk_Vector pos, bool openFlg)
 多角形頂点追加関数
 
void makePoint (std::vector< fk_Vector > *array)
 頂点群生成関数1
 
void makePoint (int num, fk_Vector *array)
 頂点群生成関数2
 
fk_VertexpushPointVertex (fk_Vector pos)
 頂点追加関数
 
void makeLines (std::vector< fk_Vector > *array)
 線分群生成関数1
 
void makeLines (int num, fk_Vector *array)
 線分群生成関数2
 
fk_EdgepushLines (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=0)
 頂点移動関数1
 
bool moveVPosition (int vertexID, double x, double y, double z, int order=0)
 頂点移動関数2
 
bool moveVPosition (int vertexID, double *array, int order=0)
 頂点移動関数2
 
void subdivShape (int count)
 細分割曲面生成関数
 
- 基底クラス FK::fk_Operation に属する継承公開メンバ関数
 fk_Operation (fk_DataBase *=nullptr)
 コンストラクタ
 
virtual ~fk_Operation ()
 デストラクタ
 
fk_VertexmakeVertex (const fk_Vector P)
 頂点生成関数
 
bool deleteVertex (fk_Vertex *V)
 頂点削除関数
 
bool moveVertex (fk_Vertex *V, fk_Vector P)
 頂点移動関数
 
fk_EdgemakeEdge (fk_Vertex *V_1, fk_Vertex *V_2, fk_Half *H_11=nullptr, fk_Half *H_12=nullptr, fk_Half *H_21=nullptr, fk_Half *H_22=nullptr)
 稜線生成関数
 
bool deleteEdge (fk_Edge *E)
 稜線削除関数
 
fk_LoopmakeLoop (fk_Half *H)
 ループ生成関数
 
bool deleteLoop (fk_Loop *L)
 ループ削除関数
 
fk_EdgeseparateLoop (fk_Half *H1, fk_Half *H2)
 ループ分割関数
 
bool uniteLoop (fk_Edge *E)
 ループ結合関数
 
fk_VertexseparateEdge (fk_Edge *E)
 稜線分離関数
 
bool uniteEdge (fk_Vertex *V)
 稜線結合関数
 
void negateBody (void)
 形状反転関数
 
void setHistoryMode (bool mode)
 履歴保存モード設定関数
 
bool getHistoryMode (void)
 履歴保存モード参照関数
 
void setHistoryMark (void)
 履歴マーク設定関数
 
bool undoHistory (void)
 UNDO 操作実行関数
 
bool redoHistory (void)
 REDO 操作実行関数
 
void setTesselateMode (bool mode)
 形状全体テセレーション設定関数
 
bool getTesselateMode (void)
 形状全体テセレーション状態参照関数
 
- 基底クラス FK::fk_ReferenceL3 に属する継承公開メンバ関数
std::vector< fk_Vertex * > getAllNeighborVOnV (fk_Vertex *V) const
 全隣接頂点参照関数
 
std::vector< fk_Edge * > getEOnVV (fk_Vertex *V1, fk_Vertex *V2) const
 頂点間稜線参照関数
 
fk_LoopgetOneLOnV (fk_Vertex *V) const
 頂点接続ループ参照関数
 
fk_LoopgetNeighborLOnLE (fk_Loop *L, fk_Edge *E) const
 稜線条件付き隣接ループ参照関数
 
std::vector< fk_Loop * > getAllNeighborLOnL (fk_Loop *L) const
 全隣接ループ参照関数
 
- 基底クラス FK::fk_ReferenceL2 に属する継承公開メンバ関数
fk_VertexgetOneNeighborVOnV (fk_Vertex *V) const
 隣接頂点参照関数
 
std::vector< fk_Half * > getAllHOnV (fk_Vertex *V) const
 頂点接続全半稜線参照関数
 
std::vector< fk_Edge * > getAllEOnV (fk_Vertex *V) const
 頂点接続全稜線参照関数
 
std::vector< fk_Loop * > getAllLOnV (fk_Vertex *V) const
 頂点接続全ループ参照関数
 
int getENumOnV (fk_Vertex *V) const
 頂点接続稜線数参照関数
 
std::vector< fk_Vertex * > getAllVOnL (fk_Loop *L) const
 ループ所属全頂点参照関数
 
std::vector< fk_Half * > getAllHOnL (fk_Loop *L) const
 ループ所属全半稜線参照関数
 
std::vector< fk_Edge * > getAllEOnL (fk_Loop *L) const
 ループ所属全稜線参照関数
 
fk_LoopgetOneNeighborLOnL (fk_Loop *L) const
 隣接ループ参照関数
 
fk_LoopgetNeighborLOnLH (fk_Loop *L, fk_Half *H) const
 半稜線条件付き隣接ループ参照関数
 
int getVNumOnL (fk_Loop *L) const
 ループ上頂点数参照関数
 
- 基底クラス FK::fk_ReferenceL1 に属する継承公開メンバ関数
fk_HalfgetOneHOnV (fk_Vertex *V) const
 頂点接続半稜線参照関数
 
fk_EdgegetOneEOnV (fk_Vertex *V) const
 頂点接続稜線参照関数
 
fk_VertexgetVOnH (fk_Half *H) const
 半稜線接続頂点参照関数
 
fk_HalfgetMateHOnH (fk_Half *H) const
 対半稜線参照関数
 
fk_EdgegetParentEOnH (fk_Half *H) const
 親稜線参照関数
 
fk_LoopgetParentLOnH (fk_Half *H) const
 親ループ参照関数
 
fk_VertexgetRightVOnE (fk_Edge *E) const
 右側頂点参照関数
 
fk_VertexgetLeftVOnE (fk_Edge *E) const
 左側頂点参照関数
 
fk_HalfgetRightHOnE (fk_Edge *E) const
 右側半稜線参照関数
 
fk_HalfgetLeftHOnE (fk_Edge *E) const
 左側半稜線参照関数
 
fk_LoopgetRightLOnE (fk_Edge *E) const
 右側ループ参照関数
 
fk_LoopgetLeftLOnE (fk_Edge *E) const
 左側ループ参照関数
 
fk_EdgeStatus getEdgeStatus (fk_Edge *E) const
 稜線位相状態参照関数
 
fk_VertexgetOneVOnL (fk_Loop *L) const
 ループ所属頂点参照関数
 
fk_HalfgetOneHOnL (fk_Loop *L) const
 ループ所属半稜線参照関数
 
fk_EdgegetOneEOnL (fk_Loop *L) const
 ループ所属稜線参照関数
 
- 基底クラス FK::fk_DataAccess に属する継承公開メンバ関数
 fk_DataAccess (void)
 コンストラクタ
 
virtual ~fk_DataAccess ()
 デストラクタ
 
bool checkDB (void) const
 データベース設定チェック関数
 
bool checkTopology (void)
 位相状況チェック関数
 
void printTopology (void)
 位相状況出力関数
 
bool existVertex (fk_Vertex *vertex) const
 頂点位相要素存在判定関数1
 
bool existVertex (int ID) const
 頂点位相要素存在判定関数2
 
bool existHalf (fk_Half *half) const
 半稜線位相要素存在判定関数1
 
bool existHalf (int ID) const
 半稜線位相要素存在判定関数2
 
bool existEdge (fk_Edge *edge) const
 稜線位相要素存在判定関数1
 
bool existEdge (int ID) const
 稜線位相要素存在判定関数2
 
bool existLoop (fk_Loop *loop) const
 ループ位相要素存在判定関数1
 
bool existLoop (int ID) const
 ループ位相要素存在判定関数2
 
fk_VertexgetVData (int ID) const
 頂点位相要素参照関数
 
fk_HalfgetHData (int ID) const
 半稜線位相要素参照関数
 
fk_EdgegetEData (int ID) const
 稜線位相要素参照関数
 
fk_LoopgetLData (int ID) const
 ループ位相要素参照関数
 
fk_VertexgetNextV (fk_Vertex *vertex) const
 頂点位相要素逐次参照関数
 
fk_HalfgetNextH (fk_Half *half) const
 半稜線位相要素逐次参照関数
 
fk_EdgegetNextE (fk_Edge *edge) const
 稜線位相要素逐次参照関数
 
fk_LoopgetNextL (fk_Loop *loop) const
 ループ位相要素逐次参照関数
 
fk_VertexgetLastV (void) const
 頂点位相最終要素参照関数
 
fk_HalfgetLastH (void) const
 半稜線位相最終要素参照関数
 
fk_EdgegetLastE (void) const
 稜線位相最終要素参照関数
 
fk_LoopgetLastL (void) const
 ループ位相最終要素参照関数
 
int getVNum (void) const
 頂点数参照関数
 
int getHNum (void) const
 半稜線数参照関数
 
int getENum (void) const
 稜線数参照関数
 
int getLNum (void) const
 ループ数参照関数
 
void getVertexList (std::list< fk_Vertex * > *list)
 頂点コンテナ取得関数
 
void getHalfList (std::list< fk_Half * > *list)
 半稜線コンテナ取得関数
 
void getEdgeList (std::list< fk_Edge * > *list)
 稜線コンテナ取得関数
 
void getLoopList (std::list< fk_Loop * > *list)
 ループコンテナ取得関数
 
- 基底クラス FK::fk_Shape に属する継承公開メンバ関数
 fk_Shape (fk_Type=fk_Type::SHAPE)
 コンストラクタ
 
virtual ~fk_Shape ()
 デストラクタ
 
fk_RealShapeType getRealShapeType (void)
 形状データ構造取得関数
 
void setShaderAttribute (std::string name, int dim, std::vector< int > *array, bool self=false)
 シェーダー内 attribute 変数設定関数1
 
void setShaderAttribute (std::string name, int dim, std::vector< float > *array, bool self=false)
 シェーダー内 attribute 変数設定関数2
 
void setShaderAttribute (std::string name, int dim, std::vector< fk_Vector > *array)
 シェーダー内 attribute 変数設定関数3
 
void setShaderAttribute (std::string name, int dim, std::vector< fk_TexCoord > *array)
 シェーダー内 attribute 変数設定関数4
 
void setShaderAttribute (std::string name, int dim, std::vector< fk_HVector > *array)
 シェーダー内 attribute 変数設定関数5
 
void modifyAttribute (std::string name)
 attribute 変数更新関数
 
- 基底クラス FK::fk_Attribute に属する継承公開メンバ関数
 fk_Attribute (void)
 コンストラクタ
 
virtual ~fk_Attribute ()
 デストラクタ
 
bool setAttrII (const int key, const int value)
 キーが int 型、値が int 型である属性設定関数
 
bool setAttrID (const int key, const double value)
 キーが int 型、値が double 型である属性設定関数
 
bool setAttrIS (const int key, const std::string value)
 キーが int 型、値が std::string 型である属性設定関数
 
bool setAttrSI (const std::string key, const int value)
 キーが std::string 型、値が int 型である属性設定関数
 
bool setAttrSD (const std::string key, const double value)
 キーが std::string 型、値が double 型である属性設定関数
 
bool setAttrSS (const std::string key, const std::string value)
 キーが std::string 型、値が std::string 型である属性設定関数
 
int getAttrII (const int key) const
 キーが int 型、値が int 型である属性参照関数
 
double getAttrID (const int key) const
 キーが int 型、値が double 型である属性参照関数
 
std::string getAttrIS (const int key) const
 キーが int 型、値が std::string 型である属性参照関数
 
int getAttrSI (const std::string key) const
 キーが std::string 型、値が int 型である属性参照関数
 
double getAttrSD (const std::string key) const
 キーが std::string 型、値が double 型である属性参照関数
 
std::string getAttrSS (const std::string key) const
 キーが std::string 型、値が std::string 型である属性参照関数
 
bool existAttrII (const int key) const
 キーが int 型、値が int 型である属性存在参照関数
 
bool existAttrID (const int key) const
 キーが int 型、値が double 型である属性存在参照関数
 
bool existAttrIS (const int key) const
 キーが int 型、値が std::string 型である属性存在参照関数
 
bool existAttrSI (const std::string key) const
 キーが std::string 型、値が int 型である属性存在参照関数
 
bool existAttrSD (const std::string key) const
 キーが std::string 型、値が double 型である属性存在参照関数
 
bool existAttrSS (const std::string key) const
 キーが std::string 型、値が std::string 型である属性存在参照関数
 
bool deleteAttrII (const int key)
 キーが int 型、値が int 型である属性消去関数
 
bool deleteAttrID (const int key)
 キーが int 型、値が double 型である属性消去関数
 
bool deleteAttrIS (const int key)
 キーが int 型、値が std::string 型である属性消去関数
 
bool deleteAttrSI (const std::string key)
 キーが std::string 型、値が int 型である属性消去関数
 
bool deleteAttrSD (const std::string key)
 キーが std::string 型、値が double 型である属性消去関数
 
bool deleteAttrSS (const std::string key)
 キーが std::string 型、値が std::string 型である属性消去関数
 
- 基底クラス FK::fk_BaseObject に属する継承公開メンバ関数
 fk_BaseObject (fk_Type type=fk_Type::BASEOBJECT)
 コンストラクタ
 
fk_Type getObjectType (void) const
 タイプ取得関数
 

詳解

ソリッドモデル形状変換クラス

このクラスは、 fk_Solid クラスのインスタンスにおいて、 インデックスフェースセットによるデータ(以下「IFSデータ」) から形状を生成する機能を提供します。 IFSデータとは、位置ベクトルの配列からなる頂点データと、 頂点IDを格納した面データ集合の2つのデータから成る形状データです。

一般形状を表すクラスとして、 fk_Solid の他に fk_IndexFaceSet クラスがあります。 fk_IndexFaceSet クラスにも fk_IndexFaceSet::makeIFSet() 関数によって、 IFS データから形状を生成することが可能です。 ただし、 fk_IndexFaceSet においては面が3角形か4角形のみ (そして混在は不可)という制限があります。また、生成後の位相変化にも対応していません。 fk_Solid の場合、任意角数の多角形を混在して扱うことが可能であるため、 より表現力が高いと言えます。ただし、 fk_Solidfk_IndexFaceSet と比較して描画速度は若干遅くなる、 メモリ使用量は若干増えるなどのデメリットがあります。

参照
fk_Solid, fk_IndexFaceSet

構築子と解体子

◆ fk_SolidBase()

FK::fk_SolidBase::fk_SolidBase ( void  )

コンストラクタ

◆ ~fk_SolidBase()

virtual FK::fk_SolidBase::~fk_SolidBase ( )
virtual

デストラクタ

関数詳解

◆ makeIFSet() [1/2]

void FK::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を補正するオーダー。通常は省略して問題ありません。
参照
fk_IndexFaceSet::makeIFSet()

◆ makeIFSet() [2/2]

void FK::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を補正するオーダー。通常は省略して問題ありません。