25 #ifndef MT_MT_VARIANT_H
26 #define MT_MT_VARIANT_H
33 #include <boost/variant.hpp>
84 typedef boost::variant<Empty,
103 std::string getTypeName(
const MtVariant& geom);
105 bool isEmpty(
const MtVariant& geom);
109 MtVariant apply(
const Transform& tr,
110 const MtVariant& geom);
118 std::string operator()(
const Vector3& v)
const {
return "vector";}
119 std::string operator()(
const Unit3& u)
const {
return "unit vector";}
120 std::string operator()(
const Point3& p)
const {
return "point";}
121 std::string operator()(
const Line3& L)
const {
return "line";}
122 std::string operator()(
const Plane3& P)
const {
return "plane";}
123 std::string operator()(
const Sphere3& s)
const {
return "sphere";}
124 std::string operator()(
const Cylinder3& c)
const {
return "cylinder";}
125 std::string operator()(
const Circle3& C)
const {
return "circle";}
126 std::string operator()(
const Ellipse3& E)
const {
return "ellipse";}
128 std::string operator()(
const T&)
const {
return "";}
138 MtVariant operator()(
const T& t)
const {
return MtVariant(apply(m_tr, t));}
156 inline std::string getTypeName(
const MtVariant& geom)
162 inline bool isEmpty(
const MtVariant& geom)
164 return boost::apply_visitor(EmptyVisitor(), geom);
168 inline MtVariant apply(
const Transform& tr,
169 const MtVariant& geom)
171 return boost::apply_visitor(TransformVisitor(tr), geom);
176 #endif // MT_MT_VARIANT_H