FineKernelToolKit  3.1.0
プロパティ | 全メンバ一覧
FK_CLI::fk_Operation クラス

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

+ FK_CLI::fk_Operation の継承関係図
+ FK_CLI::fk_Operation 連携図

公開メンバ関数

オイラー操作メソッド
fk_VertexMakeVertex (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, fk_Half^ H_12, fk_Half^ H_21, fk_Half^ H_22)
 稜線生成メソッド1 [詳解]
 
fk_EdgeMakeEdge (fk_Vertex^ V_1, fk_Vertex^ V_2)
 稜線生成メソッド2 [詳解]
 
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 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_VertexGetVData (int ID)
 頂点位相要素参照メソッド [詳解]
 
fk_HalfGetHData (int ID)
 半稜線位相要素参照メソッド [詳解]
 
fk_EdgeGetEData (int ID)
 稜線位相要素参照メソッド [詳解]
 
fk_LoopGetLData (int ID)
 ループ位相要素参照メソッド [詳解]
 
fk_VertexGetNextV (fk_Vertex^ vertex)
 頂点位相要素逐次参照メソッド [詳解]
 
fk_HalfGetNextH (fk_Half^ half)
 半稜線位相要素逐次参照メソッド [詳解]
 
fk_EdgeGetNextE (fk_Edge^ edge)
 稜線位相要素逐次参照メソッド [詳解]
 
fk_LoopGetNextL (fk_Loop^ loop)
 ループ位相要素逐次参照メソッド [詳解]
 
fk_VertexGetLastV (void)
 頂点位相最終要素参照メソッド [詳解]
 
fk_HalfGetLastH (void)
 半稜線位相最終要素参照メソッド [詳解]
 
fk_EdgeGetLastE (void)
 稜線位相最終要素参照メソッド [詳解]
 
fk_LoopGetLastL (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_HalfGetOneHOnV (fk_Vertex^ V)
 頂点接続半稜線参照メソッド [詳解]
 
fk_EdgeGetOneEOnV (fk_Vertex^ V)
 頂点接続稜線参照メソッド [詳解]
 
fk_VertexGetOneNeighborVOnV (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_LoopGetOneLOnV (fk_Vertex^ V)
 頂点接続ループ参照メソッド [詳解]
 
fk_VertexGetVOnH (fk_Half^ H)
 半稜線接続頂点参照メソッド [詳解]
 
fk_HalfGetMateHOnH (fk_Half^ H)
 対半稜線参照メソッド [詳解]
 
fk_EdgeGetParentEOnH (fk_Half^ H)
 親稜線参照メソッド [詳解]
 
fk_LoopGetParentLOnH (fk_Half^ H)
 親ループ参照メソッド [詳解]
 
fk_VertexGetRightVOnE (fk_Edge^ E)
 右側頂点参照メソッド [詳解]
 
fk_VertexGetLeftVOnE (fk_Edge^ E)
 左側頂点参照メソッド [詳解]
 
fk_HalfGetRightHOnE (fk_Edge^ E)
 右側半稜線参照メソッド [詳解]
 
fk_HalfGetLeftHOnE (fk_Edge^ E)
 左側半稜線参照メソッド [詳解]
 
fk_LoopGetRightLOnE (fk_Edge^ E)
 右側ループ参照メソッド [詳解]
 
fk_LoopGetLeftLOnE (fk_Edge^ E)
 左側ループ参照メソッド [詳解]
 
fk_EdgeStatus GetEdgeStatus (fk_Edge^ E)
 稜線位相状態参照メソッド [詳解]
 
fk_VertexGetOneVOnL (fk_Loop^ L)
 ループ所属頂点参照メソッド [詳解]
 
fk_HalfGetOneHOnL (fk_Loop^ L)
 ループ所属半稜線参照メソッド [詳解]
 
fk_EdgeGetOneEOnL (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_LoopGetOneNeighborLOnL (fk_Loop^ L)
 隣接ループ参照メソッド [詳解]
 
fk_LoopGetNeighborLOnLH (fk_Loop^ L, fk_Half^ H)
 半稜線条件付き隣接ループ参照メソッド [詳解]
 
int GetVNumOnL (fk_Loop^ L)
 ループ上頂点数参照メソッド [詳解]
 
fk_LoopGetNeighborLOnLE (fk_Loop^ L, fk_Edge^ E)
 稜線条件付き隣接ループ参照メソッド [詳解]
 
cli::array< fk_Loop^ >^ GetAllNeighborLOnL (fk_Loop^ L)
 全隣接ループ参照メソッド [詳解]
 
- 基底クラス FK_CLI::fk_Shape に属する継承公開メンバ関数
void ClearMaterial (void)
 パレット初期化メソッド [詳解]
 
void PushPalette (fk_Material^ mat)
 マテリアル追加メソッド [詳解]
 
void SetPalette (fk_Material^ mat, int ID)
 マテリアル設定メソッド [詳解]
 
fk_MaterialGetMaterial (int ID)
 マテリアル取得メソッド [詳解]
 
- 基底クラス 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_Palette^  Palette [get]
 パレットプロパティ [詳解]
 
fk_MaterialMode MaterialMode [get, set]
 マテリアルモード設定メソッド [詳解]
 
int MaterialID [get, set]
 オブジェクトマテリアル ID プロパティ [詳解]
 
int PaletteSize [get]
 パレット中のマテリアル格納数プロパティ [詳解]
 
cli::array< fk_Material^ >^ MaterialVector [get]
 マテリアル配列取得メソッド [詳解]
 

詳解

オイラー操作用クラス

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

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

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

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

参照
fk_Solid, fk_Modify, fk_DataAccess, fk_Reference

関数詳解

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

頂点生成メソッド

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

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

Euler01.png
MakeVertex と DeleteVertex
引数
[in]P新規頂点の位置ベクトル
戻り値
新規頂点位相インスタンス
bool FK_CLI::fk_Operation::DeleteVertex ( fk_Vertex V)

頂点削除メソッド

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

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

Euler01.png
MakeVertex と DeleteVertex
引数
[in]V頂点位相インスタンス
戻り値
削除に成功すれば true を、失敗すれば false を返します。
bool FK_CLI::fk_Operation::MoveVertex ( fk_Vertex V,
fk_Vector P 
)

頂点移動メソッド

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

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

Euler02.png
MoveVertex
引数
[in]V頂点位相インスタンス
[in]P移動先の位置ベクトル
戻り値
移動に成功すれば true を、失敗すれば false を返します。
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() メソッドとなります。

Euler03.png
MakeEdge と DeleteEdge
引数
[in]V_1新稜線の端点位相インスタンス
[in]V_2新稜線の端点位相インスタンス
[in]H_11半稜線位相インスタンス。詳細は上記参照のこと。
[in]H_12半稜線位相インスタンス。詳細は上記参照のこと。
[in]H_21半稜線位相インスタンス。詳細は上記参照のこと。
[in]H_22半稜線位相インスタンス。詳細は上記参照のこと。
戻り値
新稜線の生成に成功した場合、その位相インスタンスを返します。 失敗した場合は null を返します。
fk_Edge ^ FK_CLI::fk_Operation::MakeEdge ( fk_Vertex V_1,
fk_Vertex V_2 
)

稜線生成メソッド2

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

Euler03.png
MakeEdge と DeleteEdge
引数
[in]V_1新稜線の端点位相インスタンス
[in]V_2新稜線の端点位相インスタンス
戻り値
新稜線の生成に成功した場合、その位相インスタンスを返します。 失敗した場合は null を返します。
bool FK_CLI::fk_Operation::DeleteEdge ( fk_Edge E)

稜線削除メソッド

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

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

Euler03.png
MakeEdge と DeleteEdge
引数
[in]E稜線位相インスタンス
戻り値
削除に成功すれば true を、失敗すれば false を返します。
fk_Loop ^ FK_CLI::fk_Operation::MakeLoop ( fk_Half H)

ループ生成メソッド

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

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

Euler04.png
MakeLoop と DeleteLoop
引数
[in]H未定義半稜線位相インスタンス
戻り値
生成に成功した場合、そのループ位相インスタンスを返します。 失敗した場合は null を返します。
bool FK_CLI::fk_Operation::DeleteLoop ( fk_Loop L)

ループ削除メソッド

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

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

Euler04.png
MakeLoop と DeleteLoop
引数
[in]Lループ位相インスタンス
戻り値
成功した場合 true を、失敗した場合 false を返します。
fk_Edge ^ FK_CLI::fk_Operation::SeparateLoop ( fk_Half H1,
fk_Half H2 
)

ループ分割メソッド

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

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

Euler05.png
SeparateLoop と UniteLoop
引数
[in]H1半稜線位相インスタンス
[in]H2半稜線位相インスタンス
戻り値
成功した場合、新規稜線の位相インスタンスを返します。 失敗した場合は null を返します。
bool FK_CLI::fk_Operation::UniteLoop ( fk_Edge E)

ループ結合メソッド

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

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

Euler05.png
SeparateLoop と UniteLoop
引数
[in]E稜線位相インスタンス
戻り値
成功すれば true を、失敗すれば false を返します。
fk_Vertex ^ FK_CLI::fk_Operation::SeparateEdge ( fk_Edge E)

稜線分離メソッド

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

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

Euler06.png
SeparateEdge と UniteEdge
引数
[in]E稜線位相インスタンス
戻り値
成功すれば新規に生成された頂点位相インスタンスを返します。 失敗した場合は null を返します。
bool FK_CLI::fk_Operation::UniteEdge ( fk_Vertex V)

稜線結合メソッド

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

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

Euler06.png
SeparateEdge と UniteEdge
引数
[in]V頂点位相インスタンス
戻り値
成功すれば true を、失敗すれば false を返します。
void FK_CLI::fk_Operation::NegateBody ( void  )

形状反転メソッド

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

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

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

void FK_CLI::fk_Operation::SetHistoryMark ( void  )

履歴マーク設定メソッド

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

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

参照
HistoryMode, UndoHistory(), RedoHistory()
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()
bool FK_CLI::fk_Operation::RedoHistory ( void  )

REDO 操作実行メソッド

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

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

プロパティ詳解

bool FK_CLI::fk_Operation::HistoryMode
getset

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

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

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

参照
SetHistoryMark()
bool FK_CLI::fk_Operation::TesselateMode
getset

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

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

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

参照
fk_Loop::TesselateMode