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

ソリッドモデル変形操作用クラス [詳解]

#include <FK/Modify.h>

+ FK::fk_Modify の継承関係図
+ 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 クラスのインスタンスにおいて、 様々な変形処理機能を提供します。 fk_Solid の位相についての詳細は、 ユーザーズマニュアルの「形状に対する高度な操作」という章を参照して下さい。

同様の意味を持つクラスとして fk_Operation がありますが、 このクラスではより複雑な変形操作を提供しています。 内部的には、本クラスの変形処理は全て fk_Operation の変形操作のみを用いて実現されています。 これにより、 fk_Operation の持つ履歴操作が、 本クラスの変形処理においても有効となっています。 fk_Solid を利用する際に、 関数が fk_Operation によるものか、 fk_Modify によるものかを利用者が意識する必要はありません。

このクラスの機能は、大きく分けて

の3種類があります。基本形状の生成および頂点移動については、 fk_IndexFaceSet クラスにも全て同名の関数が提供されており、機能も同一です。 fk_Blockfk_Sphere といった基本形状を fk_Solid によって生成したい場合に便利です。

参照
fk_Solid, fk_Operation, fk_DataAccess, fk_ReferenceL1, fk_ReferenceL2, fk_ReferenceL3, fk_IndexFaceSet

構築子と解体子

◆ fk_Modify()

FK::fk_Modify::fk_Modify ( fk_DataBase *  = nullptr)

コンストラクタ

◆ ~fk_Modify()

virtual FK::fk_Modify::~fk_Modify ( )
virtual

デストラクタ

関数詳解

◆ removeVertexInLoop()

fk_Loop * FK::fk_Modify::removeVertexInLoop ( fk_Vertex V)

頂点削除関数

形状中の頂点と、その頂点に接続していた稜線を全て削除します。 また、頂点に接続していたループを全て結合し、新たなループを生成します。

この関数を実行するには、削除する頂点に隣接している頂点が、 全て3本以上の稜線と接続しているという条件を満たしているという必要があります。 隣接するループについては、必ずしもループが生成されている必要はありません。 この関数で削除を実行してしまうと、 それに伴い接続している稜線やループも自動的に削除されます。 削除される稜線やループの情報が必要な場合は、 事前に fk_ReferenceL2::getAllEOnV() 関数や fk_ReferenceL2::getAllLOnV() 関数等によって参照しておく必要があります。

removeVertexInLoop
引数
[in]V削除する頂点位相インスタンス
戻り値
削除に成功した場合は、 新たに生成されたループの位相インスタンスを返します。 失敗した場合は nullptr を返します。

◆ contractEdge() [1/2]

bool FK::fk_Modify::contractEdge ( fk_Edge E,
bool  R = true 
)

稜線削除関数1

形状中の稜線を削除し、その両端点を結合します。 結合後の頂点位置は、稜線の両端点の中点となります。 結合後の頂点位置を指定したい場合は、 contractEdge(fk_Edge *, fk_Vector, bool) を利用して下さい。

削除する稜線は、 fk_Operation の解説にある「定義稜線」の条件を満たしている必要があります。 その他にも、処理後に形状が矛盾を来さない多くの条件があります。 削除が可能かどうかを事前に調べるには、 checkContract() 関数を利用して下さい。

稜線の削除に成功した場合、以下の位相が同時に削除されます。

  • 稜線に接続していたループ2つ。
  • 稜線の端点のうち、どちらか一方の頂点。
  • 削除されていた頂点に接続していた稜線全て。

削除される稜線やループの情報が必要な場合は、 事前に fk_ReferenceL1::getRightLOnE()fk_ReferenceL1::getLeftLOnE() 関数や、 fk_ReferenceL2::getAllEOnV() 関数等によって参照しておく必要があります。

引数
[in]E削除する稜線位相院寸タンス
[in]Rtrue の場合、右側半稜線の始点側頂点が残ります。 false の場合はその反対が残ります。
戻り値
成功すれば true を、失敗すれば false を返します。
参照
checkContract(), contractEdge(fk_Edge *, fk_Vector, bool)

◆ contractEdge() [2/2]

bool FK::fk_Modify::contractEdge ( fk_Edge E,
fk_Vector  P,
bool  R = true 
)

稜線削除関数2

形状中の稜線を削除し、その両端点を結合します。 結合後の頂点位置を指定できる以外は、 contractEdge(fk_Edge *, bool) と同様です。

引数
[in]E削除する稜線位相院寸タンス
[in]P結合した頂点の位置ベクトル
[in]Rtrue の場合、右側半稜線の始点側頂点が残ります。 false の場合はその反対が残ります。
戻り値
成功すれば true を、失敗すれば false を返します。
参照
checkContract(), contractEdge(fk_Edge *, bool)

◆ checkContract()

bool FK::fk_Modify::checkContract ( fk_Edge E)

稜線削除可能判定関数

contractEdge() 関数によって、稜線が削除可能かどうかを判定する関数です。

引数
[in]E判定する稜線の位相インスタンス
戻り値
削除可能であれば true を、不可能であれば false を返します。

◆ makePolygon() [1/2]

fk_Loop * FK::fk_Modify::makePolygon ( std::vector< fk_Vector > *  array,
bool  openFlg,
bool  initFlg = true 
)

多角形生成関数1

新たに多角形を生成します。

引数
[in]array頂点の位置ベクトル配列。 要素数が 3 以上である必要があります。 多角形頂点は、この配列の順番に繫がります。
[in]openFlgtrue の場合、開いた多角形を生成します。 この場合は、頂点の始点と終点の間に線分を生成しません。 false の場合は閉じた多角形を生成します。 つまり、始点と終点の間に稜線を生成します。
[in]initFlgtrue の場合、既にあった形状を全て消去します。false の場合は消去しません。 false の場合、実質的に pushPolygon() と機能的に同一となります。
戻り値
生成に成功すれば、生成されたループ位相インスタンスを返します。 失敗した場合は nullptr を返します。
参照
pushPolygon(std::vector<fk_Vector> *, bool)

◆ makePolygon() [2/2]

fk_Loop * FK::fk_Modify::makePolygon ( int  num,
fk_Vector array,
bool  openFlg,
bool  initFlg = true 
)

多角形生成関数2

新たに多角形を生成します。

引数
[in]num頂点数。3以上である必要があります。
[in]array頂点の位置ベクトル配列。 多角形頂点は、この配列の順番に繫がります。
[in]openFlgtrue の場合、開いた多角形を生成します。 この場合は、頂点の始点と終点の間に線分を生成しません。 false の場合は閉じた多角形を生成します。 つまり、始点と終点の間に稜線を生成します。
[in]initFlgtrue の場合、既にあった形状を全て消去します。 false の場合は消去しません。 false の場合、実質的に pushPolygon() と機能的に同一となります。
戻り値
生成に成功すれば、生成されたループ位相インスタンスを返します。 失敗した場合は nullptr を返します。
参照
pushPolygon(int, fk_Vector *, bool)

◆ pushPolygon() [1/2]

fk_Loop * FK::fk_Modify::pushPolygon ( std::vector< fk_Vector > *  array,
bool  openFlg = false 
)

多角形追加関数1

多角形を追加します。本関数は、実質的に makePolygon(std::vector<fk_Vector> *, bool, bool) 関数で initFlg を false にした場合と機能的に同一となります。

引数
[in]array頂点の位置ベクトル配列。 要素数が 3 以上である必要があります。 多角形頂点は、この配列の順番に繫がります。
[in]openFlgtrue の場合、開いた多角形を生成します。 この場合は、頂点の始点と終点の間に線分を生成しません。 false の場合は閉じた多角形を生成します。 つまり、始点と終点の間に稜線を生成します。
戻り値
生成に成功すれば、生成されたループ位相インスタンスを返します。 失敗した場合は nullptr を返します。
参照
makePolygon(std::vector<fk_Vector> *, bool, bool)

◆ pushPolygon() [2/2]

fk_Loop * FK::fk_Modify::pushPolygon ( int  num,
fk_Vector array,
bool  openFlg = false 
)

多角形追加関数2

多角形を追加します。本関数は、実質的に makePolygon(int, fk_Vector *, bool, bool) 関数で initFlg を false にした場合と機能的に同一となります。

引数
[in]num頂点数。3以上である必要があります。
[in]array頂点の位置ベクトル配列。 多角形頂点は、この配列の順番に繫がります。
[in]openFlgtrue の場合、開いた多角形を生成します。 この場合は、頂点の始点と終点の間に線分を生成しません。 false の場合は閉じた多角形を生成します。 つまり、始点と終点の間に稜線を生成します。
戻り値
生成に成功すれば、生成されたループ位相インスタンスを返します。 失敗した場合は nullptr を返します。
参照
makePolygon(int, fk_Vector *, bool, bool)

◆ pushPolygonVertex()

void FK::fk_Modify::pushPolygonVertex ( fk_Vector  pos,
bool  openFlg 
)

多角形頂点追加関数

この関数は、多角形に対して頂点を追加します。 本関数を用いる前提条件として、 makePolygon() 関数によって 1 つだけ多角形が生成された状況でなければなりません。 その条件が満たされていない場合の動作は保証されません。

引数
[in]pos追加頂点の位置ベクトル
[in]openFlgtrue の場合、開いた多角形を生成します。 この場合は、多角形の始点と新規追加点の間に線分を生成しません。 false の場合は閉じた多角形を生成します。 つまり、多角形の始点と新規追加点の間に稜線を生成します。

◆ makePoint() [1/2]

void FK::fk_Modify::makePoint ( std::vector< fk_Vector > *  array)

頂点群生成関数1

与えられた位置ベクトル配列による頂点群を生成します。 この関数を呼ぶ前に存在していた形状データは全て消去されます。

引数
[in]array頂点群の位置ベクトル配列

◆ makePoint() [2/2]

void FK::fk_Modify::makePoint ( int  num,
fk_Vector array 
)

頂点群生成関数2

与えられた位置ベクトル配列による頂点群を生成します。 この関数を呼ぶ前に存在していた形状データは全て消去されます。

引数
[in]num頂点数
[in]array頂点群の位置ベクトル配列

◆ pushPointVertex()

fk_Vertex * FK::fk_Modify::pushPointVertex ( fk_Vector  pos)

頂点追加関数

形状に頂点1個を追加します。

引数
[in]pos頂点の位置ベクトル
戻り値
新規に生成された頂点位相のインスタンスを返します。

◆ makeLines() [1/2]

void FK::fk_Modify::makeLines ( std::vector< fk_Vector > *  array)

線分群生成関数1

与えられた位置ベクトル配列を元に、線分群を生成します。 位置ベクトルは、配列中で [始点1, 終点1, 始点2, 終点2, ...] と扱われます。配列の長さが奇数であった場合、最後の要素は無視されます。 この関数を呼ぶ前に存在していた形状データは全て消去されます。

引数
[in]array線分の両端点を表す頂点位置ベクトル配列

◆ makeLines() [2/2]

void FK::fk_Modify::makeLines ( int  num,
fk_Vector array 
)

線分群生成関数2

与えられた位置ベクトル配列を元に、線分群を生成します。 位置ベクトルは、配列中で [始点1, 終点1, 始点2, 終点2, ...] と扱われます。配列の大きさが奇数であった場合、最後の要素は無視されます。 この関数を呼ぶ前に存在していた形状データは全て消去されます。

引数
[in]num線分数。
[in]array線分の両端点を表す頂点位置ベクトル配列。 配列の長さは、線分数の2倍よりも大きくなければなりません。

◆ pushLines()

fk_Edge * FK::fk_Modify::pushLines ( fk_Vector  pos1,
fk_Vector  pos2 
)

線分追加関数

形状に線分1本を追加します。

引数
[in]pos1稜線の始点位置ベクトル
[in]pos2稜線の終点位置ベクトル
戻り値
新規に生成された稜線位相のインスタンスを返します。

◆ setLinePos() [1/2]

bool FK::fk_Modify::setLinePos ( int  ID,
fk_Vector  pos 
)

線分頂点移動関数1

線分の端点位置を移動します。 本関数を用いる前提条件として、 makeLines() によって 1 本だけ線分が生成された状況でなければなりません。 その状況が満たされていない場合の動作は保証されません。

引数
[in]ID0 であれば始点を、1 であれば終点を移動対象とします。 その他の ID が与えられた場合はエラーとなります。
[in]pos移動先の位置ベクトル
戻り値
移動に成功すれば true を、失敗すれば false を返します。

◆ setLinePos() [2/2]

bool FK::fk_Modify::setLinePos ( int  edgeID,
int  vertexID,
fk_Vector  pos 
)

線分頂点移動関数2

線分の端点位置を移動します。 本関数を用いる前提条件として、 makeLines()pushLines() のみによって、 複数の線分が生成された状況でなければなりません。 その条件が満たされていない場合の動作は保証されません。

引数
[in]edgeID線分の ID。ID は生成した順に 0, 1, 2... となります。
[in]vertexID0 であれば始点を、1 であれば終点を移動対象とします。 その他の ID が与えられた場合はエラーとなります。
[in]pos移動先の位置ベクトル
戻り値
移動に成功すれば true を、失敗すれば false を返します。

◆ changeLine()

bool FK::fk_Modify::changeLine ( int  edgeID,
fk_Vector  pos1,
fk_Vector  pos2 
)

線分両端点移動関数

線分の、両端点の位置を同時に移動します。 本関数を用いる前提条件として、 makeLines()pushLines() のみによって、 複数の線分が生成された状況でなければなりません。 その条件が満たされていない場合の動作は保証されません。

引数
[in]edgeID線分の ID。ID は生成した順に 0, 1, 2... となります。
[in]pos1始点の移動先位置ベクトル
[in]pos2終点の移動先位置ベクトル
戻り値
移動に成功すれば true を、失敗すれば false を返します。

◆ makeBlock()

void FK::fk_Modify::makeBlock ( double  x,
double  y,
double  z 
)

直方体生成関数

直方体を生成します。

直方体は、原点の物体の中心が来るように配置されます。 従って、(x, y, z) という大きさで直方体を生成した場合、 各頂点の位置ベクトルは以下のようになります。

  • (x/2, y/2, z/2)
  • (-x/2, y/2, z/2)
  • (-x/2, -y/2, z/2)
  • (x/2, -y/2, z/2)
  • (x/2, y/2, -z/2)
  • (-x/2, y/2, -z/2)
  • (-x/2, -y/2, -z/2)
  • (x/2, -y/2, -z/2)

この関数を呼ぶ前に生成されていた形状や各種属性は破棄されます。

引数
[in]xx方向の辺長
[in]yy方向の辺長
[in]zz方向の辺長
参照
fk_Block

◆ setBlockSize() [1/2]

void FK::fk_Modify::setBlockSize ( double  x,
double  y,
double  z 
)

直方体辺長変更関数

makeBlock() によって直方体を生成した後に、 直方体の辺長を一括して設定しなおします。 この関数は、 makeBlock() によって直方体を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数
[in]xx方向の辺長
[in]yy方向の辺長
[in]zz方向の辺長
参照
makeBlock(), fk_Block

◆ setBlockSize() [2/2]

void FK::fk_Modify::setBlockSize ( double  length,
fk_Axis  axis 
)

直方体個別辺長設定関数

makeBlock() によって直方体を生成した後に、 直方体の辺長を個別に設定します。 この関数は、 makeBlock() によって直方体を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数
[in]length辺長
[in]axis軸方向。以下のいずれかを指定します。
  • fk_X x方向
  • fk_Y y方向
  • fk_Z z方向
参照
makeBlock(), fk_Block

◆ setBlockScale() [1/3]

void FK::fk_Modify::setBlockScale ( double  scale)

直方体全体拡大縮小関数

makeBlock() によって直方体を生成した後に、 直方体全体を指定された倍率で拡大・縮小します。 この関数は、 makeBlock() によって直方体を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数
[in]scale倍率
参照
makeBlock(), fk_Block

◆ setBlockScale() [2/3]

void FK::fk_Modify::setBlockScale ( double  scale,
fk_Axis  axis 
)

直方体軸方向拡大縮小関数

makeBlock() によって直方体を生成した後に、 指定された軸方向についてのみ拡大・縮小します。 この関数は、 makeBlock() によって直方体を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数
[in]scale倍率
[in]axis軸方向。以下のいずれかを指定します。
  • fk_X x方向
  • fk_Y y方向
  • fk_Z z方向
参照
makeBlock(), fk_Block

◆ setBlockScale() [3/3]

void FK::fk_Modify::setBlockScale ( double  x,
double  y,
double  z 
)

直方体軸方向個別拡大縮小関数

makeBlock() によって直方体を生成した後に、 各軸方向に対し個別の倍率で拡大・縮小します。 この関数は、 makeBlock() によって直方体を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数
[in]xx方向の倍率
[in]yy方向の倍率
[in]zz方向の倍率
参照
makeBlock(), fk_Block

◆ makeCircle()

void FK::fk_Modify::makeCircle ( int  div,
double  rad 
)

円形状生成関数

円形状を生成します。

ここでの「円」は実際には正多角形を円に近似して扱っています。 多角形の角数は (分割数) * 4 となっています。 この多角形は、実質的には設定された半径の円に内接するものです。 円としての見栄えを良くするには分割数を大きめに設定すべきですが、 分割数の大きい円を大量に利用すると描画処理が遅くなるという問題が生じます。

初期状態では、中心を原点とし、 面の法線ベクトルが (0, 0, 1) となるように配置されます。

この関数を呼ぶ前に生成されていた形状や各種属性は破棄されます。

引数
[in]div分割数。実際には円弧全体をこの数値の 4 倍で分割します。
[in]rad半径
参照
fk_Circle

◆ setCircleRadius()

void FK::fk_Modify::setCircleRadius ( double  rad)

円形状半径設定関数

makeCircle() によって円形状を生成した後に、 半径を設定しなおします。 この関数は、 makeCircle() によって円形状を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数
[in]rad半径
参照
makeCircle(), fk_Circle

◆ setCircleDivide()

void FK::fk_Modify::setCircleDivide ( int  div)

円形状分割数設定関数

makeCircle() によって円形状を生成した後に、 分割数を設定しなおします。 この関数は、 makeCircle() によって円形状を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数
[in]div分割数
参照
makeCircle(), fk_Circle

◆ setCircleScale()

void FK::fk_Modify::setCircleScale ( double  scale)

円形状拡大縮小関数

makeCircle() によって円形状を生成した後に、 形状全体を与えられた倍率で拡大・縮小します。 この関数は、 makeCircle() によって円形状を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数
[in]scale倍率
参照
makeCircle(), fk_Circle

◆ makeSphere()

void FK::fk_Modify::makeSphere ( int  div,
double  rad 
)

球形状生成関数

球形状を生成します。

実際には、球を近似する3角形面集合として表現されています。 3角形面の数は分割数を \( d \) とした場合 \( 8d(d-1) \) 枚となります。 分割数が高いほど球としての描画精度は高くなりますが、 面数も多くなるため描画速度が低下することになります。 特に多くのオブジェクトを同時に配置する場合は注意が必要です。

初期状態では、中心を原点とするように配置されます。

この関数を呼ぶ前に生成されていた形状や各種属性は破棄されます。

引数
[in]div分割数
[in]rad半径
参照
fk_Sphere

◆ setSphereRadius()

void FK::fk_Modify::setSphereRadius ( double  rad)

球形状半径設定関数

makeSphere() によって球形状を生成した後に、 半径を設定しなおします。 この関数は、 makeSphere() によって球形状を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数
[in]rad半径
参照
makeSphere(), fk_Sphere

◆ setSphereDivide()

void FK::fk_Modify::setSphereDivide ( int  div)

球形状分割数設定関数

makeSphere() によって球形状を生成した後に、 分割数を設定しなおします。 この関数は、 makeSphere() によって球形状を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数
[in]div分割数
参照
makeSphere(), fk_Sphere

◆ setSphereScale()

void FK::fk_Modify::setSphereScale ( double  scale)

球形状拡大縮小関数

makeSphere() によって球形状を生成した後に、 形状全体を与えられた倍率で拡大・縮小します。 この関数は、 makeSphere() によって球形状を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数
[in]scale倍率
参照
makeSphere(), fk_Sphere

◆ makePrism()

void FK::fk_Modify::makePrism ( int  div,
double  top,
double  bottom,
double  height 
)

正多角柱(円柱)形状生成関数

正多角柱(円柱)を生成します。

円柱は、分割数の多い正多角柱として生成します。 通常、分割数が 20 を超える程度でほとんど円柱と見分けがつかなくなります。 配置は、底面の中心が原点となり、 多角柱の上面が -z 方向、底面が +z 方向となります。

設定できる要素は角数、上面半径、底面半径、高さの4要素です。 上面と底面の半径とは、それぞれの面を構成する正多角形の外接円半径を指します。

この関数を呼ぶ前に生成されていた形状や各種属性は破棄されます。

引数
[in]div角数
[in]top上面半径
[in]bottom底面半径
[in]height高さ
参照
fk_Prism

◆ setPrismDivide()

void FK::fk_Modify::setPrismDivide ( int  div)

正多角柱(円柱)角数設定関数

makePrism() によって正多角柱(円柱)を生成した後に、 角数を設定しなおします。 この関数は、 makePrism() によって球形状を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数
[in]div角数
参照
makePrism(), fk_Prism

◆ setPrismTopRadius()

void FK::fk_Modify::setPrismTopRadius ( double  top)

正多角柱(円柱)上面半径設定関数

makePrism() によって正多角柱(円柱)を生成した後に、 上面の外接円半径を設定しなおします。 この関数は、 makePrism() によって球形状を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数
[in]top上面半径
参照
makePrism(), fk_Prism

◆ setPrismBottomRadius()

void FK::fk_Modify::setPrismBottomRadius ( double  bottom)

正多角柱(円柱)角数設定関数

makePrism() によって正多角柱(円柱)を生成した後に、 底面の外接円半径を設定しなおします。 この関数は、 makePrism() によって球形状を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数
[in]bottom底面半径
参照
makePrism(), fk_Prism

◆ setPrismHeight()

void FK::fk_Modify::setPrismHeight ( double  height)

正多角柱(円柱)高さ設定関数

makePrism() によって正多角柱(円柱)を生成した後に、 高さを設定しなおします。 この関数は、 makePrism() によって球形状を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数
[in]height高さ
参照
makePrism(), fk_Prism

◆ makeCone()

void FK::fk_Modify::makeCone ( int  div,
double  rad,
double  height 
)

正多角錐(円錐)形状生成関数

正多角錐(円錐)を生成します。

円錐は、分割数の多い正多角錐として生成します。 通常、分割数が 20 を超える程度でほとんど円錐と見分けがつかなくなります。 配置は、底面の中心が原点となり、 頂点 -z 方向、底面が +z 方向となります。

設定できる要素は角数、底面半径、高さの3要素です。 底面半径とは、面を構成する正多角形の外接円半径を指します。

この関数を呼ぶ前に生成されていた形状や各種属性は破棄されます。

引数
[in]div角数
[in]rad底面半径
[in]height高さ
参照
fk_Cone

◆ setConeDivide()

void FK::fk_Modify::setConeDivide ( int  div)

正多角錐(円錐)角数設定関数

makeCone() によって正多角錐(円錐)を生成した後に、 角数を設定しなおします。 この関数は、 makeCone() によって球形状を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数
[in]div角数
参照
makeCone(), fk_Cone

◆ setConeRadius()

void FK::fk_Modify::setConeRadius ( double  rad)

正多角錐(円錐)底面半径設定関数

makeCone() によって正多角錐(円錐)を生成した後に、 底面外接円半径を設定しなおします。 この関数は、 makeCone() によって球形状を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数
[in]rad底面半径
参照
makeCone(), fk_Cone

◆ setConeHeight()

void FK::fk_Modify::setConeHeight ( double  height)

正多角錐(円錐)高さ設定関数

makeCone() によって正多角錐(円錐)を生成した後に、 高さを設定しなおします。 この関数は、 makeCone() によって球形状を生成した場合のみ有効であり、 それ以外の形状状態に対してこの関数を呼んだときの挙動は保証されません。

引数
[in]height高さ
参照
makeCone(), fk_Cone

◆ moveVPosition() [1/3]

bool FK::fk_Modify::moveVPosition ( int  vertexID,
fk_Vector  pos,
int  order = 0 
)

頂点移動関数1

指定された頂点を移動します。

引数
[in]vertexID頂点ID。
[in]pos移動先の位置ベクトル
[in]order最初の頂点IDを補正するオーダー。通常は省略して問題ありません。
戻り値
成功すれば true を、失敗すれば false を返します。

◆ moveVPosition() [2/3]

bool FK::fk_Modify::moveVPosition ( int  vertexID,
double  x,
double  y,
double  z,
int  order = 0 
)

頂点移動関数2

指定された頂点を移動します。

引数
[in]vertexID頂点ID。
[in]x移動先位置ベクトルの x 成分
[in]y移動先位置ベクトルの y 成分
[in]z移動先位置ベクトルの z 成分
[in]order最初の頂点IDを補正するオーダー。通常は省略して問題ありません。
戻り値
成功すれば true を、失敗すれば false を返します。

◆ moveVPosition() [3/3]

bool FK::fk_Modify::moveVPosition ( int  vertexID,
double *  array,
int  order = 0 
)

頂点移動関数2

指定された頂点を移動します。

引数
[in]vertexID頂点ID。
[in]array移動先位置ベクトルの各成分が入った double 型配列。
[in]order最初の頂点IDを補正するオーダー。通常は省略して問題ありません。
戻り値
成功すれば true を、失敗すれば false を返します。

◆ subdivShape()

void FK::fk_Modify::subdivShape ( int  count)

細分割曲面生成関数

この関数は、細分割曲面 (Subdivision Surface) 手法に基づいた面分割を行います。 分割回数を増加するほど細分割曲面に形状は近くなりますが、 面数は大きく増加します。 現状では、曲面生成手法は「Catmull-Clark 手法」のみをサポートしています。

引数
[in]count分割回数。