184f64f828
* Remove Common.hpp and Common.cpp, move things into their respective modules in sla.
135 lines
3.3 KiB
C++
135 lines
3.3 KiB
C++
#ifndef SLA_BOOSTADAPTER_HPP
|
|
#define SLA_BOOSTADAPTER_HPP
|
|
|
|
#include <libslic3r/Point.hpp>
|
|
#include <libslic3r/BoundingBox.hpp>
|
|
|
|
#include <boost/geometry.hpp>
|
|
|
|
namespace boost {
|
|
namespace geometry {
|
|
namespace traits {
|
|
|
|
/* ************************************************************************** */
|
|
/* Point concept adaptation ************************************************* */
|
|
/* ************************************************************************** */
|
|
|
|
template<> struct tag<Slic3r::Point> {
|
|
using type = point_tag;
|
|
};
|
|
|
|
template<> struct coordinate_type<Slic3r::Point> {
|
|
using type = coord_t;
|
|
};
|
|
|
|
template<> struct coordinate_system<Slic3r::Point> {
|
|
using type = cs::cartesian;
|
|
};
|
|
|
|
template<> struct dimension<Slic3r::Point>: boost::mpl::int_<2> {};
|
|
|
|
template<std::size_t d> struct access<Slic3r::Point, d > {
|
|
static inline coord_t get(Slic3r::Point const& a) {
|
|
return a(d);
|
|
}
|
|
|
|
static inline void set(Slic3r::Point& a, coord_t const& value) {
|
|
a(d) = value;
|
|
}
|
|
};
|
|
|
|
// For Vec2d ///////////////////////////////////////////////////////////////////
|
|
|
|
template<> struct tag<Slic3r::Vec2d> {
|
|
using type = point_tag;
|
|
};
|
|
|
|
template<> struct coordinate_type<Slic3r::Vec2d> {
|
|
using type = double;
|
|
};
|
|
|
|
template<> struct coordinate_system<Slic3r::Vec2d> {
|
|
using type = cs::cartesian;
|
|
};
|
|
|
|
template<> struct dimension<Slic3r::Vec2d>: boost::mpl::int_<2> {};
|
|
|
|
template<std::size_t d> struct access<Slic3r::Vec2d, d > {
|
|
static inline double get(Slic3r::Vec2d const& a) {
|
|
return a(d);
|
|
}
|
|
|
|
static inline void set(Slic3r::Vec2d& a, double const& value) {
|
|
a(d) = value;
|
|
}
|
|
};
|
|
|
|
// For Vec3d ///////////////////////////////////////////////////////////////////
|
|
|
|
template<> struct tag<Slic3r::Vec3d> {
|
|
using type = point_tag;
|
|
};
|
|
|
|
template<> struct coordinate_type<Slic3r::Vec3d> {
|
|
using type = double;
|
|
};
|
|
|
|
template<> struct coordinate_system<Slic3r::Vec3d> {
|
|
using type = cs::cartesian;
|
|
};
|
|
|
|
template<> struct dimension<Slic3r::Vec3d>: boost::mpl::int_<3> {};
|
|
|
|
template<std::size_t d> struct access<Slic3r::Vec3d, d > {
|
|
static inline double get(Slic3r::Vec3d const& a) {
|
|
return a(d);
|
|
}
|
|
|
|
static inline void set(Slic3r::Vec3d& a, double const& value) {
|
|
a(d) = value;
|
|
}
|
|
};
|
|
|
|
/* ************************************************************************** */
|
|
/* Box concept adaptation *************************************************** */
|
|
/* ************************************************************************** */
|
|
|
|
template<> struct tag<Slic3r::BoundingBox> {
|
|
using type = box_tag;
|
|
};
|
|
|
|
template<> struct point_type<Slic3r::BoundingBox> {
|
|
using type = Slic3r::Point;
|
|
};
|
|
|
|
template<std::size_t d>
|
|
struct indexed_access<Slic3r::BoundingBox, 0, d> {
|
|
static inline coord_t get(Slic3r::BoundingBox const& box) {
|
|
return box.min(d);
|
|
}
|
|
static inline void set(Slic3r::BoundingBox &box, coord_t const& coord) {
|
|
box.min(d) = coord;
|
|
}
|
|
};
|
|
|
|
template<std::size_t d>
|
|
struct indexed_access<Slic3r::BoundingBox, 1, d> {
|
|
static inline coord_t get(Slic3r::BoundingBox const& box) {
|
|
return box.max(d);
|
|
}
|
|
static inline void set(Slic3r::BoundingBox &box, coord_t const& coord) {
|
|
box.max(d) = coord;
|
|
}
|
|
};
|
|
|
|
}
|
|
}
|
|
|
|
template<> struct range_value<std::vector<Slic3r::Vec2d>> {
|
|
using type = Slic3r::Vec2d;
|
|
};
|
|
|
|
}
|
|
|
|
#endif // SLABOOSTADAPTER_HPP
|