# クラス fk_Solid

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

fk_Solidに対する継承グラフ
[凡例]
fk_Solidのコラボレーション図
[凡例]

すべてのメンバ一覧

## Public メソッド
| fk_Solid (void)
| コンストラクタ
| ~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 | 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 | readData (std::string fileName, bool sizeMode=true)
| 独自形式ファイル入力関数
bool | readData (FILE *fp, fk_DataFormatMode mode=FK_BINARY_FILE, bool sizeMode=true)
| 独自形式ファイルストリーム入力関数
ファイル出力関数
bool | writeVRMLFile (std::string fileName, fk_Material *material=NULL, bool triFlg=false)
| VRML ファイル出力関数1.
bool | writeVRMLFile (std::string fileName, std::vector< double > *time, std::vector< fk_Vector > *pos, fk_Material *material=NULL, 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 ファイル出力関数.
bool | writeData (std::string fileName, fk_DataFormatMode mode=FK_BINARY_FILE)
| 独自形式ファイル出力関数
bool | writeData (FILE *fp, fk_DataFormatMode mode=FK_BINARY_FILE)
| 独自形式ファイルストリーム出力関数

## 説明

半稜線構造 (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_Solid | ( | void |  | ) |

コンストラクタ

fk_Solid::~fk_Solid | ( |  | ) |

デストラクタ

## 関数

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

形状初期化関数

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

引数:

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

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

空形状状態参照関数

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

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

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

形状コピー関数

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

引数:

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

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

形状同値比較関数

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

引数:

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

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

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

SMFファイル入力関数.

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

引数:

  `[in]` | fileName | ファイル名

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

bool 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は文法解釈、特にセパレータの扱い方についてはあまり厳密になっておらず、 様々なデータによって異なる解釈がなされているようです。 そのため、構文解析がうまくいかずに入力失敗する場合がありえます。

bool 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 を返します。

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

HRCファイル入力関数.

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

引数:

  `[in]` | fileName | ファイル名

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

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

RDSファイル入力関数.

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

引数:

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

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

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

DXFファイル入力関数.

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

引数:

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

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

bool 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 を返します。

bool 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 を返します。

bool 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()

bool 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]` | solidFlg | true の場合、位相の隣接関係を最適化します。 ただし、結果として入力に失敗する場合があります。 false の場合は隣接関係を最適化せず、 すべての面が独立した状態として形状を構築します。
  `[in]` | materialID | D3DXデータではマテリアルを複数設定することができ、 各ポリゴンに対してどのマテリアルを割り振るかのIDが設定されています。 この引数にマテリアルIDを指定すると、そのIDを持つポリゴンのみを読み込みます。 materialID に -1 を入力した場合は、すべてのポリゴンを読み込みます。

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

参照:
  fk_IFSTexture::readD3DXFile()

bool fk_Solid::readData | ( | std::string | fileName,
|  | bool | sizeMode = `true` |
| ) |  |  |

独自形式ファイル入力関数

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

引数:

  `[in]` | fileName | ファイル名
  `[in]` | sizeMode | 旧バージョンとの互換性のために存在する引数です。 通常は true とするか、省略して下さい。

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

bool fk_Solid::readData | ( | FILE * | fp,
|  | fk_DataFormatMode | mode = `FK_BINARY_FILE`,
|  | bool | sizeMode = `true` |
| ) |  |  |

独自形式ファイルストリーム入力関数

独自形式のファイルにおいて、FILE 型ストリームからデータを入力します。

引数:

  `[in]` | fp | FILE型ストリームポインタ
  `[in]` | mode | フォーマットモード
  `[in]` | sizeMode | 旧バージョンとの互換性のために存在する引数です。 通常は true とするか、省略して下さい。

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

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

VRML ファイル出力関数1.

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

引数:

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

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

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

VRML ファイル出力関数2.

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

引数:

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

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

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

STL ファイル出力関数.

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

引数:

  `[in]` | fileName | ファイル名

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

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

DXF ファイル出力関数.

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

引数:

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

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

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

MQO ファイル出力関数.

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

引数:

  `[in]` | fileName | ファイル名

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

bool fk_Solid::writeData | ( | std::string | fileName,
|  | fk_DataFormatMode | mode = `FK_BINARY_FILE` |
| ) |  |  |

独自形式ファイル出力関数

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

引数:

  `[in]` | fileName | ファイル名
  `[in]` | mode | フォーマットモード

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

bool fk_Solid::writeData | ( | FILE * | fp,
|  | fk_DataFormatMode | mode = `FK_BINARY_FILE` |
| ) |  |  |

独自形式ファイルストリーム出力関数

独自形式のファイルにおいて、FILE 型ストリームによってデータを出力します。

引数:

  `[in]` | fp | FILE型ストリームポインタ
  `[in]` | mode | フォーマットモード

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