FineKernelToolKit: FK::fk_Solid クラス

FineKernelToolKit 4.3.0

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

半稜線構造 (Half-Edge Structure) による任意形状を生成、管理するクラス [詳解]

`#include <FK/Solid.h>`

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

## 公開メンバ関数

| fk_Solid (void)
| コンストラクタ
virtual | ~fk_Solid ()
| デストラクタ
void | allClear (bool matFlg=true)
| 形状初期化関数
bool | isEmpty (void)
| 空形状状態参照関数
void | cloneShape (fk_Solid *solid)
| 形状コピー関数
bool | compareShape (fk_Solid *solid)
| 形状同値比較関数
ファイル入力関数
bool | readSMFFile (std::string fileName)
| SMFファイル入力関数
bool | readSRFFile (std::string fileName)
| SRFファイル入力関数
bool | readVRMLFile (std::string fileName, bool materialFlg=true, bool solidFlg=true)
| VRML ファイル入力関数
bool | readSTLFile (std::string fileName, bool solidFlg=true, double tolerance=1.0e-08)
| STL ファイル入力関数
bool | readHRCFile (std::string fileName)
| HRCファイル入力関数
bool | readRDSFile (std::string fileName, bool solidFlg=true)
| RDSファイル入力関数
bool | readDXFFile (std::string fileName, bool solidFlg=true)
| DXFファイル入力関数
bool | readMQOFile (std::string fileName, std::string objName, bool solidFlg=true, bool contFlg=true, bool materialFlg=false)
| MQOファイル入力関数1
bool | readMQOFile (std::string fileName, std::string objName, int materialID, bool solidFlg=true, bool contFlg=true, bool materialFlg=false)
| MQOファイル入力関数2
bool | readD3DXFile (std::string fileName, std::string objName, bool solidFlg=true)
| DirectX (D3DX) ファイル入力関数1
bool | readD3DXFile (std::string fileName, std::string objName, int materialID, bool solidFlg=true)
| DirectX (D3DX) ファイル入力関数2
ファイル出力関数
bool | writeVRMLFile (std::string fileName, fk_Material *material=nullptr, bool triFlg=false)
| VRML ファイル出力関数1
bool | writeVRMLFile (std::string fileName, std::vector< double > *time, std::vector< fk_Vector > *pos, fk_Material *material=nullptr, bool triFlg=false)
| VRML ファイル出力関数2
bool | writeSTLFile (std::string fileName)
| STL ファイル出力関数
bool | writeDXFFile (std::string fileName, bool triFlg=false)
| DXF ファイル出力関数
bool | writeMQOFile (std::string fileName)
| MQO ファイル出力関数
基底クラス 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_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
| タイプ取得関数

## 詳解

半稜線構造 (Half-Edge Structure) による任意形状を生成、管理するクラス

このクラスは、半稜線構造 (Half-Edge Structure) による任意形状を制御する機能を提供します。

fk_Solid は様々な機能を持つ形状制御用クラスです。 fk_Solid 型のインスタンスが利用を想定している機能は、 実際には多くの基底クラスにて定義されています。 fk_Solid で直接定義されている関数は、 ほとんどが様々な3次元形状用ファイルフォーマットに対応した入出力機能となります。 その他、以下のようなような機能はそれぞれのクラスのマニュアルを参照して下さい。

- 位相に対する基本的な参照機能は、 fk_DataAccess を参照して下さい。
- 形状の高度な参照に関する機能は、 fk_ReferenceL1, fk_ReferenceL2, fk_ReferenceL3 を参照して下さい。
- 形状の基本操作である「オイラー操作」に関する機能は、 fk_Operation を参照して下さい。
- 形状の高度な操作については、 fk_Modify を参照して下さい。
- インデックスフェースセットデータからの生成については、 fk_SolidBase を参照して下さい。
- マテリアルの位相別設定に関する機能は、 fk_Shape を参照して下さい。
- 位相や形状に対しての独自属性設定に関する機能は、 fk_Attribute を参照して下さい。

3次元形状データファイルの入出力については、以下の形式をサポートしています。

- 入力
  - VRML 形式
  - STL 形式
  - SMF 形式
  - HRC 形式
  - RDS (Ray Dream Studio) 形式
  - DXF 形式
  - MQO (Metasequoia) 形式
  - D3DX (DirectX) 形式
  - 独自形式
- 出力
  - VRML 形式
  - STL 形式
  - DXF 形式
  - MQO (Metasequoia) 形式
  - 独自形式
  任意の形状を表現するクラスとして、 fk_Solid の他に fk_IndexFaceSet があります。 fk_IndexFaceSet は、 fk_Solid と比較して高速な描画が行えるという長所があります。 しかしその一方で、 fk_IndexFaceSet は面が3角形か4角形のみ(そして混在は不可)という制限があります。 また、位相変化を伴う変形には対応していません。 より高度な形状表現や位相変化を伴う変形を利用する場合は fk_Solid を利用して下さい。

参照
  fk_IndexFaceSet, fk_Shape, fk_Model, fk_ReferenceL1, fk_ReferenceL2, fk_ReferenceL3, fk_DataAccess, fk_Operation, fk_Modify, fk_SolidBase, fk_Shape, fk_Attribute

## 構築子と解体子

## ◆ fk_Solid()

FK::fk_Solid::fk_Solid | ( | void |  | ) |

コンストラクタ

## ◆ ~fk_Solid()

virtual FK::fk_Solid::~fk_Solid | ( |  | ) |

virtual

デストラクタ

## 関数詳解

## ◆ allClear()

void FK::fk_Solid::allClear | ( | bool | matFlg = true | ) |

形状初期化関数

インスタンスに設定されている形状と独自属性を全て消去し、 データの初期化を行います。

引数

  [in] | matFlg | true の場合、インスタンス中に設定されていたマテリアルに関する情報も 合わせて消去します。false の場合、マテリアル情報は存続させます。

## ◆ isEmpty()

bool FK::fk_Solid::isEmpty | ( | void |  | ) |

空形状状態参照関数

形状情報が空かどうかを参照します。

戻り値
  形状情報が空の場合 true を、そうでない場合は false を返します。

## ◆ cloneShape()

void FK::fk_Solid::cloneShape | ( | fk_Solid * | solid | ) |

形状コピー関数

引数として与えられたインスタンス中の形状をコピーします。 各種属性およびマテリアル情報は写しません。

引数

  [in] | solid | 複写元インスタンス

## ◆ compareShape()

bool FK::fk_Solid::compareShape | ( | fk_Solid * | solid | ) |

形状同値比較関数

引数として与えられたインスタンス中の形状と、同じ状態かどうかを比較します。 ここでいう「同じ」とは、全ての位相要素の ID も一致している状態を指します。 幾何的には同一であるが位相要素の ID が異なるケースでは「同じ」とは判断しません。

引数

  [in] | solid | 比較インスタンス

戻り値
  同じであれば true を、異なれば false を返します。

## ◆ readSMFFile()

bool FK::fk_Solid::readSMFFile | ( | std::string | fileName | ) |

SMFファイル入力関数

SMF形式のファイルからデータを入力します。

引数

  [in] | fileName | ファイル名

戻り値
  成功すれば true を、失敗すれば false を返します。

## ◆ readSRFFile()

bool FK::fk_Solid::readSRFFile | ( | std::string | fileName | ) |

SRFファイル入力関数

SRF形式のファイルからデータを入力します。

引数

  [in] | fileName | ファイル名

戻り値
  成功すれば true を、失敗すれば false を返します。

## ◆ readVRMLFile()

bool FK::fk_Solid::readVRMLFile | ( | std::string | fileName,
|  | bool | materialFlg = true,
|  | bool | solidFlg = true )

VRML ファイル入力関数

VRML形式のファイルからデータを入力します。 VRMLでは、形状を表す様々なノードがありますが、 本関数が対応しているのは「IndexedFaceSet」ノードに記述された形状のみです。

引数

  [in] | fileName | ファイル名
  [in] | materialFlg | true の場合、VRMLファイル中で設定されているマテリアル情報を入力します。 false の場合は、マテリアル情報を無視します。
  [in] | solidFlg | true の場合、位相の隣接関係を最適化します。 ただし、結果として入力に失敗する場合があります。 false の場合は隣接関係を最適化せず、 入力データのままインデックスフェースセットを構築します。

戻り値
  成功すれば true を、失敗すれば false を返します。

覚え書き
  VRML形式は、1994年に策定された通称「VRML1.0」と、 1997年に策定された「VRML97」の2種類があり、 VRML97は「VRML2.0」とも呼ばれます。 本関数では入力フォーマットとして VRML97 を想定しています。
  VRMLは文法解釈、特にセパレータの扱い方についてはあまり厳密になっておらず、 様々なデータによって異なる解釈がなされているようです。 そのため、構文解析がうまくいかずに入力失敗する場合がありえます。

## ◆ readSTLFile()

bool FK::fk_Solid::readSTLFile | ( | std::string | fileName,
|  | bool | solidFlg = true,
|  | double | tolerance = 1.0e-08 )

STL ファイル入力関数

STL形式のファイルからデータを入力します。 対応しているのは面データのみです。

引数

  [in] | fileName | ファイル名
  [in] | solidFlg | true の場合、位相の隣接関係を最適化します。 ただし、結果として入力に失敗する場合があります。 false の場合は隣接関係を最適化せず、 すべての面が独立した状態として形状を構築します。
  [in] | tolerance | solidFlg で true を指定した場合、 頂点同士が同一かどうかを判断するための距離許容誤差を指定します。 solidFlg が false であった場合、この値は無視されます。

戻り値
  成功すれば true を、失敗すれば false を返します。

## ◆ readHRCFile()

bool FK::fk_Solid::readHRCFile | ( | std::string | fileName | ) |

HRCファイル入力関数

HRC形式のファイルからデータを入力します。

引数

  [in] | fileName | ファイル名

戻り値
  成功すれば true を、失敗すれば false を返します。

## ◆ readRDSFile()

bool FK::fk_Solid::readRDSFile | ( | std::string | fileName,
|  | bool | solidFlg = true )

RDSファイル入力関数

RDS (Ray Dream Studio) 形式のファイルからデータを入力します。

引数

  [in] | fileName | ファイル名
  [in] | solidFlg | true の場合、位相の隣接関係を最適化します。 ただし、結果として入力に失敗する場合があります。 false の場合は隣接関係を最適化せず、 すべての面が独立した状態として形状を構築します。

戻り値
  成功すれば true を、失敗すれば false を返します。

## ◆ readDXFFile()

bool FK::fk_Solid::readDXFFile | ( | std::string | fileName,
|  | bool | solidFlg = true )

DXFファイル入力関数

DXF 形式のファイルからデータを入力します。

引数

  [in] | fileName | ファイル名
  [in] | solidFlg | true の場合、位相の隣接関係を最適化します。 ただし、結果として入力に失敗する場合があります。 false の場合は隣接関係を最適化せず、 すべての面が独立した状態として形状を構築します。

戻り値
  成功すれば true を、失敗すれば false を返します。

## ◆ readMQOFile() [1/2]

bool FK::fk_Solid::readMQOFile | ( | std::string | fileName,
|  | std::string | objName,
|  | bool | solidFlg = true,
|  | bool | contFlg = true,
|  | bool | materialFlg = false )

MQOファイル入力関数1

MQO 形式のファイルからデータを入力します。

この関数は、テクスチャ用のデータの入力は行いません。 テクスチャデータも併せて表示を行いたい場合は、 fk_IFSTexture クラスを利用して下さい。

MQOデータには「オブジェクト」という概念があり、 1つの形状データが複数のオブジェクトによって構成されていることがあります。 この関数では、ファイル名とともにオブジェクト名を指定する必要があります。

引数

  [in] | fileName | ファイル名
  [in] | objName | オブジェクト名
  [in] | solidFlg | true の場合、位相の隣接関係を最適化します。 ただし、結果として入力に失敗する場合があります。 false の場合は隣接関係を最適化せず、 すべての面が独立した状態として形状を構築します。
  [in] | contFlg | テクスチャ断絶の設定を指定します。これは、テクスチャ座標が不連続な箇所に対し、 形状の位相を断絶する操作を行うためのものです。 これを true にした場合は断裂操作が行われ、 テクスチャ座標が不連続な箇所が幾何的にも不連続となるように表示されます。 ほとんどの場合は、断裂操作を行った方が良好な描画結果となります。 ただし、断裂操作を行う際に新たな位相要素を生成するため、 本来のデータよりも頂点、稜線、面が若干増加する場合があります。 false にした場合は、断裂操作を行わずに通常のデータ通り読み込みます。
  [in] | materialFlg | true の場合、VRMLファイル中で設定されているマテリアル情報を入力します。 false の場合は、マテリアル情報を無視します。

戻り値
  成功すれば true を、失敗すれば false を返します。

## ◆ readMQOFile() [2/2]

bool FK::fk_Solid::readMQOFile | ( | std::string | fileName,
|  | std::string | objName,
|  | int | materialID,
|  | bool | solidFlg = true,
|  | bool | contFlg = true,
|  | bool | materialFlg = false )

MQOファイル入力関数2

MQO 形式のファイルからデータを入力します。

この関数は、テクスチャ用のデータの入力は行いません。 テクスチャデータも併せて表示を行いたい場合は、 fk_IFSTexture クラスを利用して下さい。

MQOデータには「オブジェクト」という概念があり、 1つの形状データが複数のオブジェクトによって構成されていることがあります。 この関数では、ファイル名とともにオブジェクト名を指定する必要があります。

引数

  [in] | fileName | ファイル名
  [in] | objName | オブジェクト名
  [in] | materialID | MQOデータではマテリアルを複数設定することができ、 各ポリゴンに対してどのマテリアルを割り振るかのIDが設定されています。 この引数にマテリアルIDを指定すると、そのIDを持つポリゴンのみを読み込みます。 materialID に -1 を入力した場合は、すべてのポリゴンを読み込みます。
  [in] | solidFlg | true の場合、位相の隣接関係を最適化します。 ただし、結果として入力に失敗する場合があります。 false の場合は隣接関係を最適化せず、 すべての面が独立した状態として形状を構築します。
  [in] | contFlg | テクスチャ断絶の設定を指定します。これは、テクスチャ座標が不連続な箇所に対し、 形状の位相を断絶する操作を行うためのものです。 これを true にした場合は断裂操作が行われ、 テクスチャ座標が不連続な箇所が幾何的にも不連続となるように表示されます。 ほとんどの場合は、断裂操作を行った方が良好な描画結果となります。 ただし、断裂操作を行う際に新たな位相要素を生成するため、 本来のデータよりも頂点、稜線、面が若干増加する場合があります。 false にした場合は、断裂操作を行わずに通常のデータ通り読み込みます。
  [in] | materialFlg | true の場合、VRMLファイル中で設定されているマテリアル情報を入力します。 false の場合は、マテリアル情報を無視します。

戻り値
  成功すれば true を、失敗すれば false を返します。

## ◆ readD3DXFile() [1/2]

bool FK::fk_Solid::readD3DXFile | ( | std::string | fileName,
|  | std::string | objName,
|  | bool | solidFlg = true )

DirectX (D3DX) ファイル入力関数1

DirectX 形式 (X 形式と呼ばれることもあります) のフォーマット (以下、「D3DX形式」) であるファイルからデータを入力します。 この関数で入力できるのは形状データとアニメーションデータです。 テクスチャデータを入力したい場合は、 fk_Solid クラスではなく fk_IFSTexture クラスを利用して下さい。

D3DXデータには「オブジェクト」という概念があり、 1つの形状データが複数のオブジェクトによって構成されていることがあります。 この関数では、ファイル名とともにオブジェクト名を指定する必要があります。

引数

  [in] | fileName | ファイル名
  [in] | objName | オブジェクト名。 D3DX 形式では、オブジェクト名を省略することが許容されています。 そのような場合は、この引数に空文字列 ( "" ) を入れてください。 この場合、ファイル中で最初に存在するオブジェクトのデータを入力します。
  [in] | solidFlg | true の場合、位相の隣接関係を最適化します。 ただし、結果として入力に失敗する場合があります。 false の場合は隣接関係を最適化せず、 すべての面が独立した状態として形状を構築します。

戻り値
  ファイルの入力に成功した場合 true を、失敗した場合 false を返します。

参照
  fk_IFSTexture::readD3DXFile()

## ◆ readD3DXFile() [2/2]

bool FK::fk_Solid::readD3DXFile | ( | std::string | fileName,
|  | std::string | objName,
|  | int | materialID,
|  | bool | solidFlg = true )

DirectX (D3DX) ファイル入力関数2

DirectX 形式 (X 形式と呼ばれることもあります) のフォーマット (以下、「D3DX形式」) であるファイルからデータを入力します。 この関数で入力できるのは形状データとアニメーションデータです。 テクスチャデータを入力したい場合は、 fk_Solid クラスではなく fk_IFSTexture クラスを利用して下さい。

D3DXデータには「オブジェクト」という概念があり、 1つの形状データが複数のオブジェクトによって構成されていることがあります。 この関数では、ファイル名とともにオブジェクト名を指定する必要があります。

引数

  [in] | fileName | ファイル名
  [in] | objName | オブジェクト名。 D3DX 形式では、オブジェクト名を省略することが許容されています。 そのような場合は、この引数に空文字列 ( "" ) を入れてください。 この場合、ファイル中で最初に存在するオブジェクトのデータを入力します。
  [in] | materialID | D3DXデータではマテリアルを複数設定することができ、 各ポリゴンに対してどのマテリアルを割り振るかのIDが設定されています。 この引数にマテリアルIDを指定すると、そのIDを持つポリゴンのみを読み込みます。 materialID に -1 を入力した場合は、すべてのポリゴンを読み込みます。
  [in] | solidFlg | true の場合、位相の隣接関係を最適化します。 ただし、結果として入力に失敗する場合があります。 false の場合は隣接関係を最適化せず、 すべての面が独立した状態として形状を構築します。

戻り値
  ファイルの入力に成功した場合 true を、失敗した場合 false を返します。

参照
  fk_IFSTexture::readD3DXFile()

## ◆ writeVRMLFile() [1/2]

bool FK::fk_Solid::writeVRMLFile | ( | std::string | fileName,
|  | fk_Material * | material = nullptr,
|  | bool | triFlg = false )

VRML ファイル出力関数1

VRML (VRML2.0) 形式で形状データを出力します。

引数

  [in] | fileName | ファイル名
  [in] | material | VRMLファイル中に「Material」ノードとしてマテリアル情報を保存します。 nullptr を代入した場合は、VRMLファイル中に「Material」ノードを生成しません。
  [in] | triFlg | 仮想関数からの継承のために存在する引数で、処理には一切影響しません。

戻り値
  ファイルの出力に成功した場合 true を、失敗した場合 false を返します。

## ◆ writeVRMLFile() [2/2]

bool FK::fk_Solid::writeVRMLFile | ( | std::string | fileName,
|  | std::vector< double > * | time,
|  | std::vector< fk_Vector > * | pos,
|  | fk_Material * | material = nullptr,
|  | bool | triFlg = false )

VRML ファイル出力関数2

VRML (VRML2.0) 形式で形状データを出力します。 この引数形式の場合は、 CoordinateInterpolator ノードを用いた アニメーションデータを出力することが可能です。

引数

  [in] | fileName | ファイル名
  [in] | time | CoordinateInterpolator における時間配列 (key) を入力します。
  [in] | pos | CoordinateInterpolator における位置ベクトル配列 (keyValue) を入力します。
  [in] | material | VRMLファイル中に「Material」ノードとしてマテリアル情報を保存します。 nullptr を代入した場合は、VRMLファイル中に「Material」ノードを生成しません。
  [in] | triFlg | 仮想関数からの継承のために存在する引数で、処理には一切影響しません。

戻り値
  ファイルの出力に成功した場合 true を、失敗した場合 false を返します。

## ◆ writeSTLFile()

bool FK::fk_Solid::writeSTLFile | ( | std::string | fileName | ) |

STL ファイル出力関数

STL 形式で形状データを出力します。

引数

  [in] | fileName | ファイル名

戻り値
  ファイルの出力に成功した場合 true を、失敗した場合 false を返します。

## ◆ writeDXFFile()

bool FK::fk_Solid::writeDXFFile | ( | std::string | fileName,
|  | bool | triFlg = false )

DXF ファイル出力関数

DXF 形式で形状データを出力します。

引数

  [in] | fileName | ファイル名
  [in] | triFlg | 面情報を3角形として出力したい場合は、true を代入します。 false の場合、3角形面を2点が重複している4角形面として出力します。

戻り値
  ファイルの出力に成功した場合 true を、失敗した場合 false を返します。

## ◆ writeMQOFile()

bool FK::fk_Solid::writeMQOFile | ( | std::string | fileName | ) |

MQO ファイル出力関数

MQO 形式で形状データを出力します。

引数

  [in] | fileName | ファイル名

戻り値
  ファイルの出力に成功した場合 true を、失敗した場合 false を返します。