FineKernelToolKit: FK_CLI::fk_Operation クラス

FineKernelToolKit 4.3.0

読み取り中…
検索中…
一致する文字列を見つけられません
プロパティ | 全メンバ一覧
FK_CLI::fk_Operation クラス

オイラー操作用クラス [詳解]

`#include <CLI/FK_CLI/include/Operation_CLI.h>`

FK_CLI::fk_Operation の継承関係図
[凡例]
FK_CLI::fk_Operation 連携図
[凡例]

## 公開メンバ関数

オイラー操作メソッド
fk_Vertex ^ | MakeVertex (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, fk_Half^ H_12, fk_Half^ H_21, fk_Half^ H_22)
| 稜線生成メソッド1
fk_Edge ^ | MakeEdge (fk_Vertex^ V_1, fk_Vertex^ V_2)
| 稜線生成メソッド2
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 | SetHistoryMark (void)
| 履歴マーク設定メソッド
bool | UndoHistory (void)
| UNDO 操作実行メソッド
bool | RedoHistory (void)
| REDO 操作実行メソッド
基底クラス FK_CLI::fk_DataAccess に属する継承公開メンバ関数
bool | CheckDB (void)
| データベース設定チェックメソッド
bool | CheckTopology (void)
| 位相状況チェックメソッド
bool | ExistVertex (fk_Vertex^ vertex)
| 頂点位相要素存在判定メソッド1
bool | ExistVertex (int ID)
| 頂点位相要素存在判定メソッド2
bool | ExistHalf (fk_Half^ half)
| 半稜線位相要素存在判定メソッド1
bool | ExistHalf (int ID)
| 半稜線位相要素存在判定メソッド2
bool | ExistEdge (fk_Edge^ edge)
| 稜線位相要素存在判定メソッド1
bool | ExistEdge (int ID)
| 稜線位相要素存在判定メソッド2
bool | ExistLoop (fk_Loop^ loop)
| ループ位相要素存在判定メソッド1
bool | ExistLoop (int ID)
| ループ位相要素存在判定メソッド2
fk_Vertex ^ | GetVData (int ID)
| 頂点位相要素参照メソッド
fk_Half ^ | GetHData (int ID)
| 半稜線位相要素参照メソッド
fk_Edge ^ | GetEData (int ID)
| 稜線位相要素参照メソッド
fk_Loop ^ | GetLData (int ID)
| ループ位相要素参照メソッド
fk_Vertex ^ | GetNextV (fk_Vertex^ vertex)
| 頂点位相要素逐次参照メソッド
fk_Half ^ | GetNextH (fk_Half^ half)
| 半稜線位相要素逐次参照メソッド
fk_Edge ^ | GetNextE (fk_Edge^ edge)
| 稜線位相要素逐次参照メソッド
fk_Loop ^ | GetNextL (fk_Loop^ loop)
| ループ位相要素逐次参照メソッド
fk_Vertex ^ | GetLastV (void)
| 頂点位相最終要素参照メソッド
fk_Half ^ | GetLastH (void)
| 半稜線位相最終要素参照メソッド
fk_Edge ^ | GetLastE (void)
| 稜線位相最終要素参照メソッド
fk_Loop ^ | GetLastL (void)
| ループ位相最終要素参照メソッド
cli::array< fk_Vertex^> ^ | GetVertexArray (void)
| 頂点コンテナ取得メソッド
cli::array< fk_Half^> ^ | GetHalfArray (void)
| 半稜線コンテナ取得メソッド
cli::array< fk_Edge^> ^ | GetEdgeArray (void)
| 稜線コンテナ取得メソッド
cli::array< fk_Loop^> ^ | GetLoopArray (void)
| ループコンテナ取得メソッド
基底クラス FK_CLI::fk_Reference に属する継承公開メンバ関数
fk_Half ^ | GetOneHOnV (fk_Vertex^ V)
| 頂点接続半稜線参照メソッド
fk_Edge ^ | GetOneEOnV (fk_Vertex^ V)
| 頂点接続稜線参照メソッド
fk_Vertex ^ | GetOneNeighborVOnV (fk_Vertex^ V)
| 隣接頂点参照メソッド
cli::array< fk_Half^> ^ | GetAllHOnV (fk_Vertex^ V)
| 頂点接続全半稜線参照メソッド
cli::array< fk_Edge^> ^ | GetAllEOnV (fk_Vertex^ V)
| 頂点接続全稜線参照メソッド
cli::array< fk_Loop^> ^ | GetAllLOnV (fk_Vertex^ V)
| 頂点接続全ループ参照メソッド
int | GetENumOnV (fk_Vertex^ V)
| 頂点接続稜線数参照メソッド
cli::array< fk_Vertex^> ^ | GetAllNeighborVOnV (fk_Vertex^ V)
| 全隣接頂点参照メソッド
cli::array< fk_Edge^> ^ | GetEOnVV (fk_Vertex^ V1, fk_Vertex^ V2)
| 頂点間稜線参照メソッド
fk_Loop ^ | GetOneLOnV (fk_Vertex^ V)
| 頂点接続ループ参照メソッド
fk_Vertex ^ | GetVOnH (fk_Half^ H)
| 半稜線接続頂点参照メソッド
fk_Half ^ | GetMateHOnH (fk_Half^ H)
| 対半稜線参照メソッド
fk_Edge ^ | GetParentEOnH (fk_Half^ H)
| 親稜線参照メソッド
fk_Loop ^ | GetParentLOnH (fk_Half^ H)
| 親ループ参照メソッド
fk_Vertex ^ | GetRightVOnE (fk_Edge^ E)
| 右側頂点参照メソッド
fk_Vertex ^ | GetLeftVOnE (fk_Edge^ E)
| 左側頂点参照メソッド
fk_Half ^ | GetRightHOnE (fk_Edge^ E)
| 右側半稜線参照メソッド
fk_Half ^ | GetLeftHOnE (fk_Edge^ E)
| 左側半稜線参照メソッド
fk_Loop ^ | GetRightLOnE (fk_Edge^ E)
| 右側ループ参照メソッド
fk_Loop ^ | GetLeftLOnE (fk_Edge^ E)
| 左側ループ参照メソッド
fk_EdgeStatus | GetEdgeStatus (fk_Edge^ E)
| 稜線位相状態参照メソッド
fk_Vertex ^ | GetOneVOnL (fk_Loop^ L)
| ループ所属頂点参照メソッド
fk_Half ^ | GetOneHOnL (fk_Loop^ L)
| ループ所属半稜線参照メソッド
fk_Edge ^ | GetOneEOnL (fk_Loop^ L)
| ループ所属稜線参照メソッド
cli::array< fk_Vertex^> ^ | GetAllVOnL (fk_Loop^ L)
| ループ所属全頂点参照メソッド
cli::array< fk_Half^> ^ | GetAllHOnL (fk_Loop^ L)
| ループ所属全半稜線参照メソッド
cli::array< fk_Edge^> ^ | GetAllEOnL (fk_Loop^ L)
| ループ所属全稜線参照メソッド
fk_Loop ^ | GetOneNeighborLOnL (fk_Loop^ L)
| 隣接ループ参照メソッド
fk_Loop ^ | GetNeighborLOnLH (fk_Loop^ L, fk_Half^ H)
| 半稜線条件付き隣接ループ参照メソッド
int | GetVNumOnL (fk_Loop^ L)
| ループ上頂点数参照メソッド
fk_Loop ^ | GetNeighborLOnLE (fk_Loop^ L, fk_Edge^ E)
| 稜線条件付き隣接ループ参照メソッド
cli::array< fk_Loop^> ^ | GetAllNeighborLOnL (fk_Loop^ L)
| 全隣接ループ参照メソッド
基底クラス FK_CLI::fk_Shape に属する継承公開メンバ関数
void | SetShaderAttribute (String^ name, int dim, IEnumerable< int >^ array)
| シェーダー内 attribute 変数設定メソッド1
void | SetShaderAttribute (String^ name, int dim, IEnumerable< float >^ array)
| シェーダー内 attribute 変数設定メソッド2
void | SetShaderAttribute (String^ name, int dim, IEnumerable< double >^ array)
| シェーダー内 attribute 変数設定メソッド3
void | SetShaderAttribute (String^ name, int dim, IEnumerable< fk_Vector^>^ array)
| シェーダー内 attribute 変数設定メソッド4
void | SetShaderAttribute (String^ name, int dim, IEnumerable< fk_TexCoord^>^ array)
| シェーダー内 attribute 変数設定メソッド5
void | SetShaderAttribute (String^ name, int dim, IEnumerable< fk_HVector^>^ array)
| シェーダー内 attribute 変数設定メソッド6
基底クラス FK_CLI::fk_Attribute に属する継承公開メンバ関数
bool | SetAttrII (int key, int value)
| キーが int 型、値が int 型である属性設定メソッド
bool | SetAttrID (int key, double value)
| キーが int 型、値が double 型である属性設定メソッド
bool | SetAttrIS (int key, String^ value)
| キーが int 型、値が String 型である属性設定メソッド
bool | SetAttrSI (String^ key, int value)
| キーが String 型、値が int 型である属性設定メソッド
bool | SetAttrSD (String^ key, double value)
| キーが String 型、値が double 型である属性設定メソッド
bool | SetAttrSS (String ^ key, String^ value)
| キーが String 型、値が String 型である属性設定メソッド
int | GetAttrII (int key)
| キーが int 型、値が int 型である属性参照メソッド
double | GetAttrID (int key)
| キーが int 型、値が double 型である属性参照メソッド
String ^ | GetAttrIS (int key)
| キーが int 型、値が String 型である属性参照メソッド
int | GetAttrSI (String^ key)
| キーが String 型、値が int 型である属性参照メソッド
double | GetAttrSD (String^ key)
| キーが String 型、値が double 型である属性参照メソッド
String ^ | GetAttrSS (String^ key)
| キーが String 型、値が String 型である属性参照メソッド
bool | ExistAttrII (int key)
| キーが int 型、値が int 型である属性存在参照メソッド
bool | ExistAttrID (int key)
| キーが int 型、値が double 型である属性存在参照メソッド
bool | ExistAttrIS (int key)
| キーが int 型、値が String 型である属性存在参照メソッド
bool | ExistAttrSI (String^ key)
| キーが String 型、値が int 型である属性存在参照メソッド
bool | ExistAttrSD (String^ key)
| キーが String 型、値が double 型である属性存在参照メソッド
bool | ExistAttrSS (String^ key)
| キーが String 型、値が String 型である属性存在参照メソッド
bool | DeleteAttrII (int key)
| キーが int 型、値が int 型である属性消去メソッド
bool | DeleteAttrID (int key)
| キーが int 型、値が double 型である属性消去メソッド
bool | DeleteAttrIS (int key)
| キーが int 型、値が String 型である属性消去メソッド
bool | DeleteAttrSI (String^ key)
| キーが String 型、値が int 型である属性消去メソッド
bool | DeleteAttrSD (String^ key)
| キーが String 型、値が double 型である属性消去メソッド
bool | DeleteAttrSS (String^ key)
| キーが String 型、値が String 型である属性消去メソッド

## プロパティ

bool | HistoryMode`[get, set]`
| 履歴保存モードプロパティ
bool | TesselateMode`[get, set]`
| 形状全体テセレーションプロパティ
基底クラス FK_CLI::fk_DataAccess に属する継承プロパティ
int | VNum`[get]`
| 頂点数プロパティ
int | HNum`[get]`
| 半稜線数プロパティ
int | ENum`[get]`
| 稜線数プロパティ
int | LNum`[get]`
| ループ数プロパティ
基底クラス FK_CLI::fk_Shape に属する継承プロパティ
fk_RealShapeType^ | RealShapeType`[get]`
| 形状データ構造プロパティ

## 詳解

オイラー操作用クラス

このクラスは、 fk_Solid クラスのインスタンスにおいて、 位相操作を含む様々な変形に関する基本的な機能を提供します。 fk_Solid の位相についての詳細は、 ユーザーズマニュアルの「形状に対する高度な操作」という章を参照して下さい。

境界表現によるソリッドモデルでは、 数種類の基本的な操作によって変形処理を実現します。 これを「オイラー操作」と呼び、 fk_Solid では 12 種類のオイラー操作が存在します。 どのような複雑な変形処理であっても、 これらのオイラー操作のみ合わせによって実現しています。 より高機能な形状操作機能については、 fk_Modify クラスの各機能を参照して下さい。

オイラー操作のもう一つの特徴は、 任意の操作について必ず「逆操作」が存在するということです。 これは、どのような変形処理についても、 元の形状に戻すための操作が必ず存在することを保障するということです。 このことにより、 fk_Solid では回数無制限の履歴操作を実現しています。 履歴操作については UndoHistory(), RedoHistory() を参照して下さい。

なお、本クラスの解説は独自の用語を用います。定義を以下に述べます。

- 独立頂点: 稜線に接続していない頂点のこと。
- 接続頂点: 稜線に接続している頂点のこと。
- 任意頂点: 全ての頂点のこと。
- 未定義稜線: 両側のループが定義されていない稜線のこと。
- 定義稜線: 両側、あるいは片側のループが定義されている稜線のこと。
- 任意稜線: 全ての稜線のこと。
- 定義半稜線: 親ループを保持する半稜線のこと。
- 未定義半稜線: 親ループを保持しない半稜線のこと。

参照
  fk_Solid, fk_Modify, fk_DataAccess, fk_Reference

## 関数詳解

## ◆ MakeVertex()

fk_Vertex ^ FK_CLI::fk_Operation::MakeVertex | ( | fk_Vector^ | P | ) |

頂点生成メソッド

任意の位置に新たに頂点位相を生成します。 既にその位置に頂点が存在していたとしても、同じ場所に生成します。

なお、この操作の逆操作は DeleteVertex() メソッドとなります。

MakeVertex と DeleteVertex

引数

  [in] | P | 新規頂点の位置ベクトル

戻り値
  新規頂点位相インスタンス

## ◆ DeleteVertex()

bool FK_CLI::fk_Operation::DeleteVertex | ( | fk_Vertex^ | V | ) |

頂点削除メソッド

独立頂点を削除します。 頂点が接続頂点であった場合や、 形状中に存在していなかった場合は変形操作を行いません。

なお、この操作の逆操作は MakeVertex() メソッドとなります。

MakeVertex と DeleteVertex

引数

  [in] | V | 頂点位相インスタンス

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

## ◆ MoveVertex()

bool FK_CLI::fk_Operation::MoveVertex | ( | fk_Vertex^ | V,
|  | fk_Vector^ | P )

頂点移動メソッド

任意頂点を指定した位置に移動します。 頂点は独立頂点であっても接続頂点であっても構いません。 形状中に存在していなかった場合は変形操作を行いません。

この操作の逆操作はこのメソッド自身となります。

MoveVertex

引数

  [in] | V | 頂点位相インスタンス
  [in] | P | 移動先の位置ベクトル

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

## ◆ MakeEdge() [1/2]

fk_Edge ^ FK_CLI::fk_Operation::MakeEdge | ( | fk_Vertex^ | V_1,
|  | fk_Vertex^ | V_2,
|  | fk_Half^ | H_11,
|  | fk_Half^ | H_12,
|  | fk_Half^ | H_21,
|  | fk_Half^ | H_22 )

稜線生成メソッド1

稜線を新たに生成します。 本メソッドは、新稜線の端点となる頂点 V1, V2 の状態によって、 以下の3通りの処理を行います。

1. V_1 と V_2 が共に独立頂点の場合。
   この場合は、H_11, H_12, H_21, H_22 のいずれも null を代入します。 引数自体を省略しても構いません。
2. V_1 が接続頂点で、V_2 が独立頂点の場合。
   新たに生成される稜線の半稜線を H1, H2 とし、 H1 の始点が V_1、H2 の始点が V_2 であるとします。 このとき、H_11 には接続後に H1 の前となる半稜線を代入します。 H_12 には、H2 の後となる半稜線を代入します。 このとき、H_11 および H_12 は未定義半稜線である必要があります。 H_21 と H_22 には null を代入します。 H_21 と H_22 の引数は省略しても構いません。
3. V_1, V_2 のいずれも接続頂点の場合。
   新たに生成される稜線の半稜線を H1, H2 とし、 H1 の始点が V_1、H2 の始点が V_2 であるとします。 このとき、以下のような想定となる半稜線をそれぞれ代入します。
   - H_11 は H1 の前
   - H_12 は H2 の後
   - H_21 は H2 の前
   - H_22 は H1 の後
   上記のいずれの半稜線も未定義稜線でなければなりません。

なお、この操作の逆操作は DeleteEdge() メソッドとなります。

MakeEdge と DeleteEdge

引数

  [in] | V_1 | 新稜線の端点位相インスタンス
  [in] | V_2 | 新稜線の端点位相インスタンス
  [in] | H_11 | 半稜線位相インスタンス。詳細は上記参照のこと。
  [in] | H_12 | 半稜線位相インスタンス。詳細は上記参照のこと。
  [in] | H_21 | 半稜線位相インスタンス。詳細は上記参照のこと。
  [in] | H_22 | 半稜線位相インスタンス。詳細は上記参照のこと。

戻り値
  新稜線の生成に成功した場合、その位相インスタンスを返します。 失敗した場合は null を返します。

## ◆ MakeEdge() [2/2]

fk_Edge ^ FK_CLI::fk_Operation::MakeEdge | ( | fk_Vertex^ | V_1,
|  | fk_Vertex^ | V_2 )

稜線生成メソッド2

稜線を新たに生成します。 本メソッドは、新稜線の端点となる頂点 V1, V2 が共に独立頂点の場合のみ利用することができます。 なお、この操作の逆操作は DeleteEdge() メソッドとなります。

MakeEdge と DeleteEdge

引数

  [in] | V_1 | 新稜線の端点位相インスタンス
  [in] | V_2 | 新稜線の端点位相インスタンス

戻り値
  新稜線の生成に成功した場合、その位相インスタンスを返します。 失敗した場合は null を返します。

## ◆ DeleteEdge()

bool FK_CLI::fk_Operation::DeleteEdge | ( | fk_Edge^ | E | ) |

稜線削除メソッド

未定義稜線を削除します。 稜線が定義稜線であった場合や、 形状中に存在していなかった場合は変形操作を行いません。

なお、この操作の逆操作は makeEdge() メソッドとなります。

MakeEdge と DeleteEdge

引数

  [in] | E | 稜線位相インスタンス

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

## ◆ MakeLoop()

fk_Loop ^ FK_CLI::fk_Operation::MakeLoop | ( | fk_Half ^ | H | ) |

ループ生成メソッド

ループを新たに生成します。 引数に与えられる H が未定義半稜線である場合、 H が属する半稜線列の親ループとして新規ループが生成され、 それまで空洞であった場所に面が貼られます。 H が定義半稜線である場合は、生成に失敗することになります。

なお、この操作の逆操作は DeleteLoop() メソッドとなります。

MakeLoop と DeleteLoop

引数

  [in] | H | 未定義半稜線位相インスタンス

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

## ◆ DeleteLoop()

bool FK_CLI::fk_Operation::DeleteLoop | ( | fk_Loop^ | L | ) |

ループ削除メソッド

ループを削除します。 成功した場合、存在していた面がなくなり空洞状態となります。 また、削除したループを親ループとして持っていた半稜線は、 全て未定義半稜線となります。

なお、この操作の逆操作は MakeLoop() メソッドとなります。

MakeLoop と DeleteLoop

引数

  [in] | L | ループ位相インスタンス

戻り値
  成功した場合 true を、失敗した場合 false を返します。

## ◆ SeparateLoop()

fk_Edge ^ FK_CLI::fk_Operation::SeparateLoop | ( | fk_Half^ | H1,
|  | fk_Half^ | H2 )

ループ分割メソッド

ループを分割します。 引数の H1 と H2 は同じループに属している必要があります。 分割の際に生成される稜線の端点は、 H1 の終点にあたる頂点と H2 の始点にあたる頂点となります。 始点した端点の間に既に稜線が存在していた場合であっても、 分割処理は行われます。 (その場合は、片方の面が縮退することになります。) 分割に成功した場合、H1 と H2 は新規ループ側に属することになりますので、 新規ループの位相インスタンスを得たい場合は H1 や H2 の親ループを参照して下さい。

なお、この操作の逆操作は UniteLoop() メソッドとなります。

SeparateLoop と UniteLoop

引数

  [in] | H1 | 半稜線位相インスタンス
  [in] | H2 | 半稜線位相インスタンス

戻り値
  成功した場合、新規稜線の位相インスタンスを返します。 失敗した場合は null を返します。

## ◆ UniteLoop()

bool FK_CLI::fk_Operation::UniteLoop | ( | fk_Edge^ | E | ) |

ループ結合メソッド

両側にループを保持する稜線 E を削除し、 両側のループを結合します。 E が両側にループを持つ稜線ではない場合は、 失敗として扱われ変形操作は行われません。

なお、この操作の逆操作は SeparateLoop() メソッドとなります。

SeparateLoop と UniteLoop

引数

  [in] | E | 稜線位相インスタンス

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

## ◆ SeparateEdge()

fk_Vertex ^ FK_CLI::fk_Operation::SeparateEdge | ( | fk_Edge^ | E | ) |

稜線分離メソッド

任意稜線を分割し、新たな頂点を稜線の両端点の中点位置に生成します。

なお、この操作の逆操作は UniteEdge() メソッドとなります。

SeparateEdge と UniteEdge

引数

  [in] | E | 稜線位相インスタンス

戻り値
  成功すれば新規に生成された頂点位相インスタンスを返します。 失敗した場合は null を返します。

## ◆ UniteEdge()

bool FK_CLI::fk_Operation::UniteEdge | ( | fk_Vertex^ | V | ) |

稜線結合メソッド

2本の任意稜線を 1 本に結合します。 結合する稜線の間にある頂点位相 V を引数として入力します。 成功した場合は、V は削除されます。 V に接続している稜線が 2 本でなかった場合は失敗となり、形状操作は行われません。

なお、この操作の逆操作は SeparateEdge() メソッドとなります。

SeparateEdge と UniteEdge

引数

  [in] | V | 頂点位相インスタンス

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

## ◆ NegateBody()

void FK_CLI::fk_Operation::NegateBody | ( | void |  | ) |

形状反転メソッド

形状全体の表裏を反転します。 内部的には、全ての稜線において半稜線の左右を入れ替えるという処理を行います。 この処理により、位相関係は以下のような状況となります。

- 関係の変わらないもの
  - 頂点と半稜線の組み合わせ
  - 稜線と半稜線の組み合わせ
  - ループと頂点の組み合わせ
  - ループと稜線の組み合わせ
- 関係が変化するもの
  - ループと半稜線の組み合わせ
  - 半稜線の接続

この操作の逆操作はこのメソッド自身となります。

## ◆ SetHistoryMark()

void FK_CLI::fk_Operation::SetHistoryMark | ( | void |  | ) |

履歴マーク設定メソッド

履歴操作を行う場合は、「マーク」というものを設定する必要があります。 このマークとは、形状の状態の「スナップショット」を保管するもので、 UNDO 操作や REDO 操作を行った際にはマークを行った時点まで戻ります。

UNDO 操作は UndoHistory() メソッドを、 REDO 操作は RedoHistory() メソッドを用います。

参照
  HistoryMode, UndoHistory(), RedoHistory()

## ◆ UndoHistory()

bool FK_CLI::fk_Operation::UndoHistory | ( | void |  | ) |

UNDO 操作実行メソッド

形状を、前に SetHistoryMark() メソッドによってマークした状態まで戻します。 複数回呼び出した場合は、マークした順番を逆に辿って戻していきます。 これを「UNDO 操作」と呼びます。 例えば、形状の初期状態を A、変形を進めてマークした状態を順番に B、C、D とします。これを以下のように表記します。 アスタリスクは現時点での形状を意味します。

- A → B → C → *D

D の状態の形状にたいし、UNDO 操作を行うと形状は C、B、A と 順番に戻っていきます。

- A → B → C → *D
- A → B → *C → D
- A → *B → C → D
- *A → B → C → D

マークが以前にない状態で UNDO 操作を行った場合は、 履歴保存モードを有効にした時点まで戻ります。

戻した状態の形状を、改めて先の段階に戻す操作を「REDO 操作」と言います。 前述した例で、説明すると、D から一端 A まで戻した形状に対し、 REDO 操作を行うと B、C、D と移っていくということです。図にすると、

- *A → B → C → D
- A → *B → C → D
- A → B → *C → D
- A → B → C → *D

となっていくことを意味します。

ただし、UNDO 操作で戻した形状に対し、 REDO 操作以外の形状変形操作を行った場合、 先の履歴部分については破棄されてしまいます。 前述の例で説明すると、D の状態を一端 B にまで UNDO 操作で戻します。 図にすると、

- A → B → C → *D

この D の状態から、

- A → *B → C → D

この B の状態になるということです。ここで B の形状に変形操作を行うと、 C や D に至るための履歴情報が破棄されます。

- A → B → *B'

ただし、図にあるように B より前の履歴情報については保持されます。

戻り値
  UNDO 操作に成功した場合 true を、失敗した場合 false を返します。

参照
  RedoHistory()

## ◆ RedoHistory()

bool FK_CLI::fk_Operation::RedoHistory | ( | void |  | ) |

REDO 操作実行メソッド

UNDO 操作によって以前の状態に戻した形状に対し、 その後にマークした状態まで形状を戻します。 UNDO 操作や REDO 操作に関しての詳細は、 UndoHistory() メソッドの解説を参照して下さい。

戻り値
  REDO 操作に成功した場合 true を、失敗した場合 false を返します。

参照
  UndoHistory()

## プロパティ詳解

## ◆ HistoryMode

bool FK_CLI::fk_Operation::HistoryMode

getset

履歴保存モードプロパティ

履歴保存モードの有無効の参照・設定を行います。 true の場合、履歴保存モードを有効、false の場合は無効となります。 デフォルトでは「無効」となっており、 変形操作による履歴は保存されません。 このプロパティを true に設定した時点から保存されます。 従って、設定を有効にする前の履歴は一切保存されないということに注意して下さい。

また、モードが有効となっている状態から無効に設定しなおしたとき、 有効時に保存されていた履歴は全て破棄されます。

参照
  SetHistoryMark()

## ◆ TesselateMode

bool FK_CLI::fk_Operation::TesselateMode

getset

形状全体テセレーションプロパティ

形状中の全てのループに対し、テセレーション有無効の参照・設定を行います。 true の場合、全てのループのテセレーションを有効となります。 false の場合は無効となります。

このプロパティを false から true にした場合、 変更前に行ったループ個別の設定は全て破棄されます。 テセレーションについての詳細は、 fk_Loop::TesselateMode プロパティの解説を参照して下さい。

参照
  fk_Loop::TesselateMode