FineKernelToolKit: FK/Operation.h ソースファイル

FineKernelToolKit 4.3.0

読み取り中…
検索中…
一致する文字列を見つけられません
Operation.h
[詳解]
1#if !defined(__FK_OPERATION_HEADER__)
2#define __FK_OPERATION_HEADER__
3
4#include <vector>
5#include <FK/DrawCache.h>
6#include <FK/History.hh>
7
8namespace FK {
9
10
12
46
47 class fk_Operation : public fk_DrawCache {
48
49#if !defined(FK_DOXYGEN_USER_PROCESS)
50 enum class Code : int {
51 MAKEV = 1,
52 DELV,
53 MOVEV,
54 MAKEE1,
55 MAKEE2,
56 MAKEE3,
57 DELE1,
58 DELE2,
59 DELE3,
60 MAKEL,
61 DELL,
62 SEPL,
63 UNITL,
64 SEPE,
65 UNITE,
66 NEGATE
67 };
68
69 class Member {
70 public:
71 fk_History history;
72 bool historyMode;
73 bool tesselateMode;
74
75 Member(void);
76 };
77#endif
78
79 public:
81 fk_Operation(fk_DataBase * = nullptr);
82
84 virtual ~fk_Operation();
85
88
90
103 fk_Vertex * makeVertex(const fk_Vector P);
104
106
120 bool deleteVertex(fk_Vertex *V);
121
123
138 bool moveVertex(fk_Vertex *V, fk_Vector P);
139
141
184 fk_Edge * makeEdge(fk_Vertex *V_1, fk_Vertex *V_2,
185 fk_Half *H_11 = nullptr,
186 fk_Half *H_12 = nullptr,
187 fk_Half *H_21 = nullptr,
188 fk_Half *H_22 = nullptr);
189
191
205 bool deleteEdge(fk_Edge *E);
206
208
226 fk_Loop * makeLoop(fk_Half *H);
227
229
244 bool deleteLoop(fk_Loop *L);
245
247
271 fk_Edge * separateLoop(fk_Half *H1, fk_Half *H2);
272
274
289 bool uniteLoop(fk_Edge *E);
290
292
306 fk_Vertex * separateEdge(fk_Edge *E);
307
309
324 bool uniteEdge(fk_Vertex *V);
325
327
342 void negateBody(void);
343
345
348
350
366 void setHistoryMode(bool mode);
367
369
377 bool getHistoryMode(void);
378
380
390 void setHistoryMark(void);
391
393
442 bool undoHistory(void);
443
445
455 bool redoHistory(void);
457
460
462
474 void setTesselateMode(bool mode);
475
477
487 bool getTesselateMode(void);
489
490#if !defined(FK_DOXYGEN_USER_PROCESS)
491 void PrintHistorySize(void);
492#endif
493
494 private:
495 std::unique_ptr<Member> _m;
496
497 fk_Loop * SetLoop(fk_Half *, bool, fk_Loop * = nullptr, int = FK_UNDEFINED);
498 void UndefVNorm(fk_Vertex *);
499
500 fk_Vertex * MakeVertex(const fk_Vector, int);
501 bool DeleteVertex(fk_Vertex *);
502 bool MoveVertex(fk_Vertex *, fk_Vector);
503
504 fk_Edge * MakeEdge1(fk_Vertex *, fk_Vertex *,
505 int = FK_UNDEFINED, int = FK_UNDEFINED, int = FK_UNDEFINED);
506 fk_Edge * MakeEdge2(fk_Vertex *, fk_Vertex *,
507 fk_Half *, fk_Half *, bool, bool,
508 int = FK_UNDEFINED, int = FK_UNDEFINED, int = FK_UNDEFINED);
509 fk_Edge * MakeEdge3(fk_Vertex *, fk_Vertex *,
510 fk_Half *, fk_Half *,
511 fk_Half *, fk_Half *, bool, bool,
512 int = FK_UNDEFINED, int = FK_UNDEFINED, int = FK_UNDEFINED);
513
514 bool DeleteEdge1(fk_Edge *);
515 bool DeleteEdge2(fk_Half *);
516 bool DeleteEdge3(fk_Edge *);
517
518 fk_Loop * MakeLoop(fk_Half *, int = FK_UNDEFINED);
519 bool DeleteLoop(fk_Loop *);
520
521 fk_Edge * SeparateLoop(fk_Half *, fk_Half *, fk_Half *, fk_Half *, bool, bool,
522 int = FK_UNDEFINED, int = FK_UNDEFINED,
523 int = FK_UNDEFINED, int = FK_UNDEFINED);
524
525 bool UniteLoop(fk_Edge *, fk_Half *);
526 fk_Vertex * SeparateEdge(fk_Edge *, bool, bool, bool, bool, fk_Vector *,
527 int = FK_UNDEFINED, int = FK_UNDEFINED,
528 int = FK_UNDEFINED, int = FK_UNDEFINED);
529
530 bool UniteEdge(fk_Vertex *);
531 void NegateBody(void);
532
533
534 void UndoCom(fk_Command *);
535 void RedoCom(fk_Command *);
536
537 void DeleteAllTesselateData(void);
538 };
539}
540
541#endif // !__FK_OPERATION_HEADER__
542
543/****************************************************************************
544 *
545 * Copyright (c) 1999-2024, Fine Kernel Project, All rights reserved.
546 *
547 * Redistribution and use in source and binary forms,
548 * with or without modification, are permitted provided that the
549 * following conditions are met:
550 *
551 * - Redistributions of source code must retain the above
552 * copyright notice, this list of conditions and the
553 * following disclaimer.
554 *
555 * - Redistributions in binary form must reproduce the above
556 * copyright notice, this list of conditions and the
557 * following disclaimer in the documentation and/or
558 * other materials provided with the distribution.
559 *
560 * - Neither the name of the copyright holders nor the names
561 * of its contributors may be used to endorse or promote
562 * products derived from this software without specific
563 * prior written permission.
564 *
565 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
566 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
567 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
568 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
569 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
570 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
571 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
572 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
573 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
574 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
575 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
576 * POSSIBILITY OF SUCH DAMAGE.
577 *
578 ****************************************************************************/
579/****************************************************************************
580 *
581 * Copyright (c) 1999-2024, Fine Kernel Project, All rights reserved.
582 *
583 * 本ソフトウェアおよびソースコードのライセンスは、基本的に
584 * 「修正 BSD ライセンス」に従います。以下にその詳細を記します。
585 *
586 * ソースコード形式かバイナリ形式か、変更するかしないかを問わず、
587 * 以下の条件を満たす場合に限り、再頒布および使用が許可されます。
588 *
589 * - ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、
590 * および下記免責条項を含めること。
591 *
592 * - バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の
593 * 資料に、上記の著作権表示、本条件一覧、および下記免責条項を
594 * 含めること。
595 *
596 * - 書面による特別の許可なしに、本ソフトウェアから派生した製品の
597 * 宣伝または販売促進に、本ソフトウェアの著作権者の名前または
598 * コントリビューターの名前を使用してはならない。
599 *
600 * 本ソフトウェアは、著作権者およびコントリビューターによって「現
601 * 状のまま」提供されており、明示黙示を問わず、商業的な使用可能性、
602 * および特定の目的に対する適合性に関す暗黙の保証も含め、またそれ
603 * に限定されない、いかなる保証もないものとします。著作権者もコン
604 * トリビューターも、事由のいかんを問わず、損害発生の原因いかんを
605 * 問わず、かつ責任の根拠が契約であるか厳格責任であるか(過失その
606 * 他の)不法行為であるかを問わず、仮にそのような損害が発生する可
607 * 能性を知らされていたとしても、本ソフトウェアの使用によって発生
608 * した(代替品または代用サービスの調達、使用の喪失、データの喪失、
609 * 利益の喪失、業務の中断も含め、またそれに限定されない)直接損害、
610 * 間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害に
611 * ついて、一切責任を負わないものとします。
612 *
613 ****************************************************************************/
DrawCache.h
FK::fk_DrawCache
描画用キャッシュデータを管理するクラス
Definition DrawCache.h:15
FK::fk_Edge
ソリッドモデルの稜線位相を管理するクラス
Definition Edge.h:41
FK::fk_Half
ソリッドモデルの半稜線位相を管理するクラス
Definition Half.h:25
FK::fk_Loop
ソリッドモデルのループ位相を管理するクラス
Definition Loop.h:43
FK::fk_Operation::redoHistory
bool redoHistory(void)
REDO 操作実行関数
FK::fk_Operation::separateEdge
fk_Vertex * separateEdge(fk_Edge *E)
稜線分離関数
FK::fk_Operation::setHistoryMode
void setHistoryMode(bool mode)
履歴保存モード設定関数
FK::fk_Operation::separateLoop
fk_Edge * separateLoop(fk_Half *H1, fk_Half *H2)
ループ分割関数
FK::fk_Operation::~fk_Operation
virtual ~fk_Operation()
デストラクタ
FK::fk_Operation::negateBody
void negateBody(void)
形状反転関数
FK::fk_Operation::undoHistory
bool undoHistory(void)
UNDO 操作実行関数
FK::fk_Operation::getTesselateMode
bool getTesselateMode(void)
形状全体テセレーション状態参照関数
FK::fk_Operation::uniteEdge
bool uniteEdge(fk_Vertex *V)
稜線結合関数
FK::fk_Operation::makeVertex
fk_Vertex * makeVertex(const fk_Vector P)
頂点生成関数
FK::fk_Operation::uniteLoop
bool uniteLoop(fk_Edge *E)
ループ結合関数
FK::fk_Operation::deleteEdge
bool deleteEdge(fk_Edge *E)
稜線削除関数
FK::fk_Operation::deleteLoop
bool deleteLoop(fk_Loop *L)
ループ削除関数
FK::fk_Operation::moveVertex
bool moveVertex(fk_Vertex *V, fk_Vector P)
頂点移動関数
FK::fk_Operation::makeLoop
fk_Loop * makeLoop(fk_Half *H)
ループ生成関数
FK::fk_Operation::fk_Operation
fk_Operation(fk_DataBase *=nullptr)
コンストラクタ
FK::fk_Operation::deleteVertex
bool deleteVertex(fk_Vertex *V)
頂点削除関数
FK::fk_Operation::getHistoryMode
bool getHistoryMode(void)
履歴保存モード参照関数
FK::fk_Operation::makeEdge
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)
稜線生成関数
FK::fk_Operation::setTesselateMode
void setTesselateMode(bool mode)
形状全体テセレーション設定関数
FK::fk_Operation::setHistoryMark
void setHistoryMark(void)
履歴マーク設定関数
FK::fk_Vector
3次元ベクトルを管理するクラス
Definition Vector.h:45
FK::fk_Vertex
ソリッドモデルの頂点位相を管理するクラス
Definition Vertex.h:26
FK
Fine Kernel Toolkit 名前空間
Definition Angle.h:6