Blob Blame Raw

#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