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

FineKernelToolKit 4.3.0

読み取り中…
検索中…
一致する文字列を見つけられません
Boundary.h
[詳解]
1#if !defined(__FK_BOUNDARY_HEADER__)
2#define __FK_BOUNDARY_HEADER__
3
4#include <FK/MatAdmin.h>
5#include <FK/DrawMode.h>
6
7namespace FK {
8
9 class fk_Model;
10 class fk_Color;
11 class fk_IndexFaceSet;
12
14 enum class fk_BoundaryMode {
15 SPHERE,
16 AABB,
17 OBB,
18 CAPSULE,
19 NONE
20 };
21
23
64
65 class fk_Boundary : public fk_MatrixAdmin {
66
67#if !defined(FK_DOXYGEN_USER_PROCESS)
68 class Member {
69 public:
70 fk_BoundaryMode bMode;
71 bool bDrawToggle;
72 std::unique_ptr<fk_Color> bLineColor, bIntLineColor;
73 double bLineWidth;
74
75 double bSphereRad;
76 std::unique_ptr<fk_Vector> bSpherePos;
77 std::unique_ptr<fk_Vector> bAABBMin, bAABBMax;
78 std::unique_ptr<fk_Vector> bOBBMin, bOBBMax;
79 std::unique_ptr<fk_Vector> bCapSPos, bCapEPos;
80 double bCapRad;
81
82 std::unique_ptr<fk_IndexFaceSet> bSphere;
83 std::unique_ptr<fk_IndexFaceSet> bAABB;
84 std::unique_ptr<fk_IndexFaceSet> bOBB;
85 std::unique_ptr<fk_IndexFaceSet> bCapsule;
86
87 Member(void);
88 };
89#endif
90
91 public:
92
94 fk_Boundary(fk_Type);
95
97 virtual ~fk_Boundary();
98
101
103
118 void setBMode(fk_BoundaryMode mode);
119
121
128 fk_BoundaryMode getBMode(void);
130
133
135
144 void setSphere(double r);
145
147
156 void setSpherePos(fk_Vector pos);
157
159
166 double getSphere(void);
167
169
176 fk_Vector getSpherePos(void);
178
181
183
194 void setAABBSize(double x, double y, double z);
195
197
207 void setAABBSize(fk_Vector size);
208
210
221 void setAABBMaxMin(fk_Vector max, fk_Vector min);
222
224
235 void setAABBMax(fk_Vector v);
236
238
249 void setAABBMin(fk_Vector v);
250
252
259 fk_Vector getAABBSize(void);
260
262
269 fk_Vector getAABBMax(void);
270
272
279 fk_Vector getAABBMin(void);
280
282
293 std::tuple<fk_Vector, fk_Vector> getAABBMaxMin(void);
294
296
299
301
312 void setOBBSize(double x, double y, double z);
313
315
324 void setOBBSize(fk_Vector size);
325
327
339 void setOBBMaxMin(fk_Vector max, fk_Vector min);
340
342
353 void setOBBMax(fk_Vector v);
354
356
367 void setOBBMin(fk_Vector v);
368
370
377 fk_Vector getOBBSize(void);
378
380
387 fk_Vector getOBBMax(void);
388
390
397 fk_Vector getOBBMin(void);
398
400
411 std::tuple<fk_Vector, fk_Vector> getOBBMaxMin(void);
413
416
418
431 void setCapsule(fk_Vector sPos, fk_Vector ePos, double r);
432
434
441 void setCapsuleStartPos(fk_Vector argP);
442
444
451 void setCapsuleEndPos(fk_Vector argP);
452
454
461 void setCapsuleRadius(double r);
462
464
471 double getCapsuleRadius(void);
472
474
481 double getCapsuleLength(void);
482
484
491 std::tuple<fk_Vector, fk_Vector> getCapsulePos(void);
492
494
501 fk_Vector getCapsuleStartPos(void);
502
504
511 fk_Vector getCapsuleEndPos(void);
512
514
517
519
527 void setBDrawToggle(bool mode);
528
530
539 bool getBDrawToggle(void);
540
542
550 void setBLineColor(fk_Color col);
551
553
560 fk_Color * getBLineColor(void);
561
563
575 void setBIntLineColor(fk_Color col);
576
578
585 fk_Color * getBIntLineColor(void);
586
588
595 void setBLineWidth(double width);
596
598
605 double getBLineWidth(void);
607
608#if !defined(FK_DOXYGEN_USER_PROCESS)
609 fk_IndexFaceSet * GetBShape(void);
610#endif
611
612 private:
613 std::unique_ptr<Member> _m;
614 void MakeAABBShape();
615 void MakeOBBShape();
616 };
617}
618
619#endif // !__FK_BOUNDARY_HEADER__
620
621/****************************************************************************
622 *
623 * Copyright (c) 1999-2024, Fine Kernel Project, All rights reserved.
624 *
625 * Redistribution and use in source and binary forms,
626 * with or without modification, are permitted provided that the
627 * following conditions are met:
628 *
629 * - Redistributions of source code must retain the above
630 * copyright notice, this list of conditions and the
631 * following disclaimer.
632 *
633 * - Redistributions in binary form must reproduce the above
634 * copyright notice, this list of conditions and the
635 * following disclaimer in the documentation and/or
636 * other materials provided with the distribution.
637 *
638 * - Neither the name of the copyright holders nor the names
639 * of its contributors may be used to endorse or promote
640 * products derived from this software without specific
641 * prior written permission.
642 *
643 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
644 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
645 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
646 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
647 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
648 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
649 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
650 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
651 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
652 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
653 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
654 * POSSIBILITY OF SUCH DAMAGE.
655 *
656 ****************************************************************************/
657/****************************************************************************
658 *
659 * Copyright (c) 1999-2024, Fine Kernel Project, All rights reserved.
660 *
661 * 本ソフトウェアおよびソースコードのライセンスは、基本的に
662 * 「修正 BSD ライセンス」に従います。以下にその詳細を記します。
663 *
664 * ソースコード形式かバイナリ形式か、変更するかしないかを問わず、
665 * 以下の条件を満たす場合に限り、再頒布および使用が許可されます。
666 *
667 * - ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、
668 * および下記免責条項を含めること。
669 *
670 * - バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の
671 * 資料に、上記の著作権表示、本条件一覧、および下記免責条項を
672 * 含めること。
673 *
674 * - 書面による特別の許可なしに、本ソフトウェアから派生した製品の
675 * 宣伝または販売促進に、本ソフトウェアの著作権者の名前または
676 * コントリビューターの名前を使用してはならない。
677 *
678 * 本ソフトウェアは、著作権者およびコントリビューターによって「現
679 * 状のまま」提供されており、明示黙示を問わず、商業的な使用可能性、
680 * および特定の目的に対する適合性に関す暗黙の保証も含め、またそれ
681 * に限定されない、いかなる保証もないものとします。著作権者もコン
682 * トリビューターも、事由のいかんを問わず、損害発生の原因いかんを
683 * 問わず、かつ責任の根拠が契約であるか厳格責任であるか(過失その
684 * 他の)不法行為であるかを問わず、仮にそのような損害が発生する可
685 * 能性を知らされていたとしても、本ソフトウェアの使用によって発生
686 * した(代替品または代用サービスの調達、使用の喪失、データの喪失、
687 * 利益の喪失、業務の中断も含め、またそれに限定されない)直接損害、
688 * 間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害に
689 * ついて、一切責任を負わないものとします。
690 *
691 ****************************************************************************/
DrawMode.h
MatAdmin.h
FK::fk_Boundary::~fk_Boundary
virtual ~fk_Boundary()
デストラクタ
FK::fk_Boundary::getAABBMaxMin
std::tuple< fk_Vector, fk_Vector > getAABBMaxMin(void)
軸平行境界ボックス (AABB) 最大最小取得関数
FK::fk_Boundary::getCapsuleRadius
double getCapsuleRadius(void)
カプセル型領域規定距離取得関数
FK::fk_Boundary::getCapsuleEndPos
fk_Vector getCapsuleEndPos(void)
カプセル型中心軸終点取得関数
FK::fk_Boundary::getBLineColor
fk_Color * getBLineColor(void)
境界ボリューム非干渉描画色取得関数
FK::fk_Boundary::setOBBSize
void setOBBSize(fk_Vector size)
有向境界ボックス (OBB) サイズ設定関数2
FK::fk_Boundary::setOBBMax
void setOBBMax(fk_Vector v)
有向境界ボックス (OBB) 最大値側設定関数
FK::fk_Boundary::setCapsuleRadius
void setCapsuleRadius(double r)
カプセル型領域規定距離設定関数
FK::fk_Boundary::getOBBMaxMin
std::tuple< fk_Vector, fk_Vector > getOBBMaxMin(void)
有向境界ボックス (OBB) 最大最小取得関数
FK::fk_Boundary::getOBBMax
fk_Vector getOBBMax(void)
有向境界ボックス (OBB) 最大値側取得関数
FK::fk_Boundary::setSpherePos
void setSpherePos(fk_Vector pos)
境界球位置設定関数
FK::fk_Boundary::getAABBMin
fk_Vector getAABBMin(void)
軸平行境界ボックス (AABB) 最小値側取得関数
FK::fk_Boundary::getBLineWidth
double getBLineWidth(void)
境界ボリューム描画線幅取得関数
FK::fk_Boundary::getCapsulePos
std::tuple< fk_Vector, fk_Vector > getCapsulePos(void)
カプセル型中心軸両端点取得関数
FK::fk_Boundary::setOBBMin
void setOBBMin(fk_Vector v)
有向境界ボックス (OBB) 最小値側設定関数
FK::fk_Boundary::getBMode
fk_BoundaryMode getBMode(void)
境界ボリューム選択状態参照関数
FK::fk_Boundary::getCapsuleLength
double getCapsuleLength(void)
カプセル型中心軸長取得関数
FK::fk_Boundary::setCapsuleStartPos
void setCapsuleStartPos(fk_Vector argP)
カプセル型中心軸始点設定関数
FK::fk_Boundary::setAABBMaxMin
void setAABBMaxMin(fk_Vector max, fk_Vector min)
軸平行境界ボックス (AABB) 最大最小設定関数
FK::fk_Boundary::setAABBMax
void setAABBMax(fk_Vector v)
軸平行境界ボックス (AABB) 最大値側設定関数
FK::fk_Boundary::getBIntLineColor
fk_Color * getBIntLineColor(void)
境界ボリューム干渉状態描画色取得関数
FK::fk_Boundary::setAABBSize
void setAABBSize(fk_Vector size)
軸平行境界ボックス (AABB) サイズ設定関数2
FK::fk_Boundary::getCapsuleStartPos
fk_Vector getCapsuleStartPos(void)
カプセル型中心軸始点取得関数
FK::fk_Boundary::setBLineWidth
void setBLineWidth(double width)
境界ボリューム描画線幅設定関数
FK::fk_Boundary::setAABBSize
void setAABBSize(double x, double y, double z)
軸平行境界ボックス (AABB) サイズ設定関数1
FK::fk_Boundary::setBIntLineColor
void setBIntLineColor(fk_Color col)
境界ボリューム干渉状態描画色設定関数
FK::fk_Boundary::setAABBMin
void setAABBMin(fk_Vector v)
軸平行境界ボックス (AABB) 最小値側設定関数
FK::fk_Boundary::getSpherePos
fk_Vector getSpherePos(void)
境界球位置参照関数
FK::fk_Boundary::getAABBMax
fk_Vector getAABBMax(void)
軸平行境界ボックス (AABB) 最大値側取得関数
FK::fk_Boundary::setOBBSize
void setOBBSize(double x, double y, double z)
有向境界ボックス (OBB) サイズ設定関数1
FK::fk_Boundary::getBDrawToggle
bool getBDrawToggle(void)
境界ボリューム描画有無取得関数
FK::fk_Boundary::getOBBMin
fk_Vector getOBBMin(void)
有向境界ボックス (OBB) 最小値側取得関数
FK::fk_Boundary::setSphere
void setSphere(double r)
境界球半径設定関数
FK::fk_Boundary::setCapsule
void setCapsule(fk_Vector sPos, fk_Vector ePos, double r)
カプセル型設定関数
FK::fk_Boundary::setOBBMaxMin
void setOBBMaxMin(fk_Vector max, fk_Vector min)
有向境界ボックス (OBB) 最大最小設定関数
FK::fk_Boundary::fk_Boundary
fk_Boundary(fk_Type)
コンストラクタ
FK::fk_Boundary::setBMode
void setBMode(fk_BoundaryMode mode)
境界ボリューム選択関数
FK::fk_Boundary::setBDrawToggle
void setBDrawToggle(bool mode)
境界ボリューム描画有無設定関数
FK::fk_Boundary::setCapsuleEndPos
void setCapsuleEndPos(fk_Vector argP)
カプセル型中心軸終点設定関数
FK::fk_Boundary::getSphere
double getSphere(void)
境界球半径参照関数
FK::fk_Boundary::getAABBSize
fk_Vector getAABBSize(void)
軸平行境界ボックス (AABB) サイズ取得関数
FK::fk_Boundary::setBLineColor
void setBLineColor(fk_Color col)
境界ボリューム非干渉描画色設定関数
FK::fk_Boundary::getOBBSize
fk_Vector getOBBSize(void)
有向境界ボックス (OBB) サイズ取得関数
FK::fk_Color
RGB色を管理するクラス
Definition Color.h:21
FK::fk_IndexFaceSet
インデックスフェースセットによる任意形状を生成、管理するクラス
Definition IndexFace.h:68
FK::fk_MatrixAdmin::fk_MatrixAdmin
fk_MatrixAdmin(fk_Type=fk_Type::MATRIXADMIN)
コンストラクタ
FK::fk_Model
モデルを生成、管理するクラス
Definition Model.h:101
FK::fk_Vector
3次元ベクトルを管理するクラス
Definition Vector.h:45
FK
Fine Kernel Toolkit 名前空間
Definition Angle.h:6
FK::fk_BoundaryMode
fk_BoundaryMode
境界ボリュームのタイプを表す列挙型
Definition Boundary.h:14
FK::fk_BoundaryMode::AABB
@ AABB
軸平行境界ボックス (Axis Aligned Bounding Box)
Definition Boundary.h:16
FK::fk_BoundaryMode::OBB
@ OBB
有向境界ボックス (Oriented Bounding Box)
Definition Boundary.h:17
FK::fk_BoundaryMode::NONE
@ NONE
未定義境界
Definition Boundary.h:19
FK::fk_Type
fk_Type
オブジェクトインスタンスのタイプを表す列挙型
Definition Base.h:43
FK::fk_Type::CAPSULE
@ CAPSULE
fk_Capsule 型
Definition Base.h:59
FK::fk_Type::SPHERE
@ SPHERE
fk_Sphere 型
Definition Base.h:55