#ifndef SHAPE_H
#define SHAPE_H
#include "geometry.h"
#include "model.h"
class Shape {
public:
virtual ~Shape() { }
virtual Real distance_to_triangle(const Triangle &triangle) const = 0;
};
class PointShape: public Shape {
public:
Matrix4 matrix;
PointShape(const Vector3 &pos, const Vector3 &dir);
Real distance_to_triangle(const Triangle &triangle) const override;
static Real base_distance_to_triangle(const Vector3 *v);
};
class CilinderShape: public Shape {
public:
Matrix4 matrix;
CilinderShape(const Vector3 &pos, const Vector3 &dir, Real radius);
Real distance_to_triangle(const Triangle &triangle) const override;
static Real base_distance_to_triangle(const Vector3 *v);
};
class ConeShape: public Shape {
public:
Matrix4 matrix;
Real cut_radius;
Real height;
ConeShape(const Vector3 &pos, const Vector3 &dir, Real radius, Real height, Real cut_radius = 0);
Real distance_to_triangle(const Triangle &triangle) const override;
static Real base_distance_to_triangle(const Vector3 *v, Real height, Real cut_radius = 0);
};
#endif