mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-25 17:57:02 +00:00
Implement mapping of IfcExtrudedAreaSolid
This commit is contained in:
+40
-12
@@ -1,5 +1,7 @@
|
||||
#include <boost/variant.hpp>
|
||||
|
||||
#include <exception>
|
||||
|
||||
namespace ifcopenshell {
|
||||
|
||||
namespace geometry {
|
||||
@@ -9,6 +11,8 @@ namespace taxonomy {
|
||||
struct item {
|
||||
int instance_id;
|
||||
virtual item* clone() const = 0;
|
||||
|
||||
item(int id) : instance_id(id) {}
|
||||
};
|
||||
|
||||
struct matrix4 : public item {
|
||||
@@ -25,61 +29,78 @@ struct matrix4 : public item {
|
||||
struct geom_item : public item {
|
||||
// geometry::style surface_style;
|
||||
matrix4 matrix;
|
||||
|
||||
geom_item(int id) : item(id) {}
|
||||
geom_item(int id, matrix4 m) : item(id), matrix(m) {}
|
||||
};
|
||||
|
||||
template <size_t N>
|
||||
struct cartesian_base : public item {
|
||||
struct cartesian_base : public geom_item {
|
||||
std::array<double, N> components;
|
||||
|
||||
cartesian_base(double x, double y, double z = 0.) : components{ {x, y, z} } {}
|
||||
};
|
||||
|
||||
struct point3 : public cartesian_base<3> {
|
||||
virtual item* clone() const { return new point3(*this); }
|
||||
|
||||
point3(double x, double y, double z = 0.) : cartesian_base(x, y, z) {}
|
||||
};
|
||||
|
||||
struct direction3 : public cartesian_base<3> {
|
||||
virtual item* clone() const { return new direction3(*this); }
|
||||
|
||||
direction3(double x, double y, double z = 0.) : cartesian_base(x, y, z) {}
|
||||
};
|
||||
|
||||
struct line : public item {
|
||||
struct line : public geom_item {
|
||||
virtual item* clone() const { return new line(*this); }
|
||||
};
|
||||
|
||||
struct circle : public item {
|
||||
struct circle : public geom_item {
|
||||
virtual item* clone() const { return new circle(*this); }
|
||||
};
|
||||
|
||||
struct ellipse : public item {
|
||||
struct ellipse : public geom_item {
|
||||
virtual item* clone() const { return new ellipse(*this); }
|
||||
};
|
||||
|
||||
struct bspline : public item {
|
||||
struct bspline : public geom_item {
|
||||
virtual item* clone() const { return new bspline(*this); }
|
||||
};
|
||||
|
||||
typedef boost::variant<line, circle, ellipse, bspline> curve;
|
||||
|
||||
struct edge : public item {
|
||||
struct edge : public geom_item {
|
||||
boost::variant<point3, double> start, end;
|
||||
boost::optional<curve> basis;
|
||||
|
||||
virtual item* clone() const { return new edge(*this); }
|
||||
};
|
||||
|
||||
struct boundary : public item {
|
||||
struct loop : public geom_item {
|
||||
std::vector<edge> edges;
|
||||
|
||||
virtual item* clone() const { return new boundary(*this); }
|
||||
virtual item* clone() const { return new loop(*this); }
|
||||
};
|
||||
|
||||
struct face : public item {
|
||||
boundary outer;
|
||||
std::vector<boundary> inner;
|
||||
struct face : public geom_item {
|
||||
loop outer;
|
||||
std::vector<loop> inner;
|
||||
|
||||
virtual item* clone() const { return new face(*this); }
|
||||
|
||||
face(int id, loop o) : geom_item(id), outer(o) {}
|
||||
face(int id, loop o, std::vector<loop> i) : geom_item(id), outer(o), inner(i) {}
|
||||
face(int id, matrix4 m, loop o) : geom_item(id, m), outer(o) {}
|
||||
face(int id, matrix4 m, loop o, std::vector<loop> i) : geom_item(id, m), outer(o), inner(i) {}
|
||||
};
|
||||
|
||||
struct sweep : public item {
|
||||
struct sweep : public geom_item {
|
||||
face basis;
|
||||
|
||||
sweep(int id, face b) : geom_item(id), basis(b) {}
|
||||
sweep(int id, matrix4 m, face b) : geom_item(id, m), basis(b) {}
|
||||
};
|
||||
|
||||
struct extrusion : public sweep {
|
||||
@@ -87,10 +108,17 @@ struct extrusion : public sweep {
|
||||
double depth;
|
||||
|
||||
virtual item* clone() const { return new extrusion(*this); }
|
||||
extrusion(int id, matrix4 m, face basis, direction3 dir, double d) : sweep(id, m, basis), direction(dir), depth(d) {}
|
||||
};
|
||||
|
||||
class topology_error : public std::runtime_error {
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user