FineKernelToolKit: FK::fk_Modify クラス

FineKernelToolKit 4.3.0

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

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

`#include <FK/Modify.h>`

FK::fk_Modify の継承関係図
[凡例]
FK::fk_Modify 連携図
[凡例]

## 公開メンバ関数

| fk_Modify (fk_DataBase *=nullptr)
| コンストラクタ
virtual | ~fk_Modify ()
| デストラクタ
位相操作関数
fk_Loop * | removeVertexInLoop (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_Loop * | makePolygon (std::vector< fk_Vector > *array, bool openFlg, bool initFlg=true)
| 多角形生成関数1
fk_Loop * | makePolygon (int num, fk_Vector *array, bool openFlg, bool initFlg=true)
| 多角形生成関数2
fk_Loop * | pushPolygon (std::vector< fk_Vector > *array, bool openFlg=false)
| 多角形追加関数1
fk_Loop * | pushPolygon (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_Vertex * | pushPointVertex (fk_Vector pos)
| 頂点追加関数
線分生成関数
void | makeLines (std::vector< fk_Vector > *array)
| 線分群生成関数1
void | makeLines (int num, fk_Vector *array)
| 線分群生成関数2
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=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_Vertex * | makeVertex (const 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=nullptr, fk_Half *H_12=nullptr, fk_Half *H_21=nullptr, fk_Half *H_22=nullptr)
| 稜線生成関数
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 | 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_Loop * | getOneLOnV (fk_Vertex *V) const
| 頂点接続ループ参照関数
fk_Loop * | getNeighborLOnLE (fk_Loop *L, fk_Edge *E) const
| 稜線条件付き隣接ループ参照関数
std::vector< fk_Loop * > | getAllNeighborLOnL (fk_Loop *L) const
| 全隣接ループ参照関数
基底クラス FK::fk_ReferenceL2 に属する継承公開メンバ関数
fk_Vertex * | getOneNeighborVOnV (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_Loop * | getOneNeighborLOnL (fk_Loop *L) const
| 隣接ループ参照関数
fk_Loop * | getNeighborLOnLH (fk_Loop *L, fk_Half *H) const
| 半稜線条件付き隣接ループ参照関数
int | getVNumOnL (fk_Loop *L) const
| ループ上頂点数参照関数
基底クラス FK::fk_ReferenceL1 に属する継承公開メンバ関数
fk_Half * | getOneHOnV (fk_Vertex *V) const
| 頂点接続半稜線参照関数
fk_Edge * | getOneEOnV (fk_Vertex *V) const
| 頂点接続稜線参照関数
fk_Vertex * | getVOnH (fk_Half *H) const
| 半稜線接続頂点参照関数
fk_Half * | getMateHOnH (fk_Half *H) const
| 対半稜線参照関数
fk_Edge * | getParentEOnH (fk_Half *H) const
| 親稜線参照関数
fk_Loop * | getParentLOnH (fk_Half *H) const
| 親ループ参照関数
fk_Vertex * | getRightVOnE (fk_Edge *E) const
| 右側頂点参照関数
fk_Vertex * | getLeftVOnE (fk_Edge *E) const
| 左側頂点参照関数
fk_Half * | getRightHOnE (fk_Edge *E) const
| 右側半稜線参照関数
fk_Half * | getLeftHOnE (fk_Edge *E) const
| 左側半稜線参照関数
fk_Loop * | getRightLOnE (fk_Edge *E) const
| 右側ループ参照関数
fk_Loop * | getLeftLOnE (fk_Edge *E) const
| 左側ループ参照関数
fk_EdgeStatus | getEdgeStatus (fk_Edge *E) const
| 稜線位相状態参照関数
fk_Vertex * | getOneVOnL (fk_Loop *L) const
| ループ所属頂点参照関数
fk_Half * | getOneHOnL (fk_Loop *L) const
| ループ所属半稜線参照関数
fk_Edge * | getOneEOnL (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_Vertex * | getVData (int ID) const
| 頂点位相要素参照関数
fk_Half * | getHData (int ID) const
| 半稜線位相要素参照関数
fk_Edge * | getEData (int ID) const
| 稜線位相要素参照関数
fk_Loop * | getLData (int ID) const
| ループ位相要素参照関数
fk_Vertex * | getNextV (fk_Vertex *vertex) const
| 頂点位相要素逐次参照関数
fk_Half * | getNextH (fk_Half *half) const
| 半稜線位相要素逐次参照関数
fk_Edge * | getNextE (fk_Edge *edge) const
| 稜線位相要素逐次参照関数
fk_Loop * | getNextL (fk_Loop *loop) const
| ループ位相要素逐次参照関数
fk_Vertex * | getLastV (void) const
| 頂点位相最終要素参照関数
fk_Half * | getLastH (void) const
| 半稜線位相最終要素参照関数
fk_Edge * | getLastE (void) const
| 稜線位相最終要素参照関数
fk_Loop * | getLastL (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 によるものかを利用者が意識する必要はありません。

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

- 高度な位相操作 (removeVertexInLoop(), contractEdge() など)
- 基本形状の生成 (makeBlock(), makeSphere() など)
- 頂点移動 (moveVPosition())

の3種類があります。基本形状の生成および頂点移動については、 fk_IndexFaceSet クラスにも全て同名の関数が提供されており、機能も同一です。 fk_Block や fk_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] | R | true の場合、右側半稜線の始点側頂点が残ります。 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] | R | true の場合、右側半稜線の始点側頂点が残ります。 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] | openFlg | true の場合、開いた多角形を生成します。 この場合は、頂点の始点と終点の間に線分を生成しません。 false の場合は閉じた多角形を生成します。 つまり、始点と終点の間に稜線を生成します。
  [in] | initFlg | true の場合、既にあった形状を全て消去します。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] | openFlg | true の場合、開いた多角形を生成します。 この場合は、頂点の始点と終点の間に線分を生成しません。 false の場合は閉じた多角形を生成します。 つまり、始点と終点の間に稜線を生成します。
  [in] | initFlg | true の場合、既にあった形状を全て消去します。 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] | openFlg | true の場合、開いた多角形を生成します。 この場合は、頂点の始点と終点の間に線分を生成しません。 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] | openFlg | true の場合、開いた多角形を生成します。 この場合は、頂点の始点と終点の間に線分を生成しません。 false の場合は閉じた多角形を生成します。 つまり、始点と終点の間に稜線を生成します。

戻り値
  生成に成功すれば、生成されたループ位相インスタンスを返します。 失敗した場合は nullptr を返します。

参照
  makePolygon(int, fk_Vector *, bool, bool)

## ◆ pushPolygonVertex()

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

多角形頂点追加関数

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

引数

  [in] | pos | 追加頂点の位置ベクトル
  [in] | openFlg | true の場合、開いた多角形を生成します。 この場合は、多角形の始点と新規追加点の間に線分を生成しません。 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] | ID | 0 であれば始点を、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] | vertexID | 0 であれば始点を、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] | x | x方向の辺長
  [in] | y | y方向の辺長
  [in] | z | z方向の辺長

参照
  fk_Block

## ◆ setBlockSize() [1/2]

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

直方体辺長変更関数

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

引数

  [in] | x | x方向の辺長
  [in] | y | y方向の辺長
  [in] | z | z方向の辺長

参照
  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] | x | x方向の倍率
  [in] | y | y方向の倍率
  [in] | z | z方向の倍率

参照
  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 | 分割回数。