X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgeometry%2Fshape.h;h=22b18876620657e9f2858ea568196cc66a2d3f9c;hb=7353dc087872cdb93bd57cbaf2b6f0dcc21f9a03;hp=3f52613bef98d9df47e3c935fd4ddca213e98b82;hpb=adb812a194961d542dcb0abd61258cbc8723ecd9;p=libs%2Fmath.git diff --git a/source/geometry/shape.h b/source/geometry/shape.h index 3f52613..22b1887 100644 --- a/source/geometry/shape.h +++ b/source/geometry/shape.h @@ -3,19 +3,13 @@ #include #include +#include "boundingbox.h" +#include "ray.h" +#include "surfacepoint.h" namespace Msp { namespace Geometry { -template -class HyperBox; - -template -class Ray; - -template -class SurfacePoint; - /** Base class and interface for geometric shapes. Shapes may be bounded or unbounded. They are always considered to be solid, i.e. have a distinct inside @@ -31,16 +25,22 @@ public: virtual Shape *clone() const = 0; - virtual HyperBox get_axis_aligned_bounding_box() const = 0; + virtual BoundingBox get_axis_aligned_bounding_box() const = 0; virtual bool contains(const LinAl::Vector &) const = 0; - virtual bool check_intersection(const Ray &) const = 0; + bool check_intersection(const Ray &) const; virtual unsigned get_max_ray_intersections() const = 0; virtual unsigned get_intersections(const Ray &, SurfacePoint *, unsigned) const = 0; std::vector > get_intersections(const Ray &) const; }; template -std::vector > Shape::get_intersections(const Ray &ray) const +inline bool Shape::check_intersection(const Ray &ray) const +{ + return get_intersections(ray, 0, 1); +} + +template +inline std::vector > Shape::get_intersections(const Ray &ray) const { unsigned max_isect = get_max_ray_intersections(); std::vector > points(max_isect);