diff options
-rw-r--r-- | assetFactory/faceController.h | 2 | ||||
-rw-r--r-- | lib/geometricPlane.cpp | 8 | ||||
-rw-r--r-- | lib/geometricPlane.h | 23 |
3 files changed, 20 insertions, 13 deletions
diff --git a/assetFactory/faceController.h b/assetFactory/faceController.h index fb89d25..e940640 100644 --- a/assetFactory/faceController.h +++ b/assetFactory/faceController.h @@ -11,7 +11,7 @@ class FaceController : public Mutation, public Style, public Persistence::Persistable { public: - class Split : public Persistable, public GeometricPlane { + class Split : public Persistable, public GeometricPlaneT<RelativePosition3D> { public: std::string id; diff --git a/lib/geometricPlane.cpp b/lib/geometricPlane.cpp new file mode 100644 index 0000000..7aadf6a --- /dev/null +++ b/lib/geometricPlane.cpp @@ -0,0 +1,8 @@ +#include "geometricPlane.h" + +bool +GeometricPlane::isIntersect(PlaneRelation a, PlaneRelation b) +{ + return ((a == PlaneRelation::Above && b == PlaneRelation::Below) + || (a == PlaneRelation::Below && b == PlaneRelation::Above)); +} diff --git a/lib/geometricPlane.h b/lib/geometricPlane.h index 5be76ec..fd3a1d7 100644 --- a/lib/geometricPlane.h +++ b/lib/geometricPlane.h @@ -9,17 +9,23 @@ class GeometricPlane { public: + enum class PlaneRelation { Above, Below, On }; + + static bool isIntersect(PlaneRelation a, PlaneRelation b); +}; + +template<typename PositionType> class GeometricPlaneT : public GeometricPlane { +public: struct DistAndPosition { - float dist; - Position3D position; + PositionType::value_type dist; + PositionType position; }; - enum class PlaneRelation { Above, Below, On }; - Position3D origin; + PositionType origin; Normal3D normal; [[nodiscard]] inline PlaneRelation - getRelation(Position3D point) const + getRelation(PositionType point) const { const auto d = glm::dot(normal, point - origin); return d < 0.F ? PlaneRelation::Below : d > 0.F ? PlaneRelation::Above : PlaneRelation::On; @@ -34,11 +40,4 @@ public: } return DistAndPosition {dist, ray.start + (ray.direction * dist)}; } - - inline static bool - isIntersect(PlaneRelation a, PlaneRelation b) - { - return ((a == PlaneRelation::Above && b == PlaneRelation::Below) - || (a == PlaneRelation::Below && b == PlaneRelation::Above)); - } }; |