Seperate map() and map_impl() for automatic taxonomy item <> ifc instance mapping

This commit is contained in:
Thomas Krijnen
2019-08-28 09:24:00 +02:00
parent 640b08159f
commit 3bfe3b9ab5
4 changed files with 23 additions and 23 deletions
@@ -824,16 +824,16 @@ bool OpenCascadeKernel::convert_impl(const taxonomy::extrusion* extrusion, ifcop
return true; return true;
} }
bool OpenCascadeKernel::convert_impl(const taxonomy::shell *extrusion, ifcopenshell::geometry::ConversionResults& results) { bool OpenCascadeKernel::convert_impl(const taxonomy::shell *shell, ifcopenshell::geometry::ConversionResults& results) {
TopoDS_Shape shape; TopoDS_Shape shape;
if (!convert(extrusion, shape)) { if (!convert(shell, shape)) {
return false; return false;
} }
results.emplace_back(ConversionResult( results.emplace_back(ConversionResult(
extrusion->instance->data().id(), shell->instance->data().id(),
extrusion->matrix, shell->matrix,
new OpenCascadeShape(shape), new OpenCascadeShape(shape),
extrusion->surface_style shell->surface_style
)); ));
return true; return true;
} }
+1 -1
View File
@@ -2,6 +2,6 @@
#undef BIND #undef BIND
#endif #endif
#define BIND(T) ifcopenshell::geometry::taxonomy::item* map(const IfcSchema::T*); #define BIND(T) ifcopenshell::geometry::taxonomy::item* map_impl(const IfcSchema::T*);
#include "mapping.i" #include "mapping.i"
+1 -1
View File
@@ -5,7 +5,7 @@
#define BIND(T) \ #define BIND(T) \
if (l->declaration().is(IfcSchema::T::Class())) { \ if (l->declaration().is(IfcSchema::T::Class())) { \
try { \ try { \
taxonomy::item* item = map((IfcSchema::T*)l); \ taxonomy::item* item = map_impl((IfcSchema::T*)l); \
if (item != nullptr) { \ if (item != nullptr) { \
item->instance = l; \ item->instance = l; \
try { \ try { \
+16 -16
View File
@@ -144,7 +144,7 @@ namespace {
} }
}; };
taxonomy::item* mapping::map(const IfcSchema::IfcExtrudedAreaSolid* inst) { taxonomy::item* mapping::map_impl(const IfcSchema::IfcExtrudedAreaSolid* inst) {
// @todo length unit // @todo length unit
return new taxonomy::extrusion( return new taxonomy::extrusion(
as<taxonomy::matrix4>(map(inst->Position())), as<taxonomy::matrix4>(map(inst->Position())),
@@ -154,19 +154,19 @@ taxonomy::item* mapping::map(const IfcSchema::IfcExtrudedAreaSolid* inst) {
); );
} }
taxonomy::item* mapping::map(const IfcSchema::IfcRepresentation* inst) { taxonomy::item* mapping::map_impl(const IfcSchema::IfcRepresentation* inst) {
return map_to_collection(this, inst->Items()); return map_to_collection(this, inst->Items());
} }
taxonomy::item* mapping::map(const IfcSchema::IfcFaceBasedSurfaceModel* inst) { taxonomy::item* mapping::map_impl(const IfcSchema::IfcFaceBasedSurfaceModel* inst) {
return map_to_collection(this, inst->FbsmFaces()); return map_to_collection(this, inst->FbsmFaces());
} }
taxonomy::item* mapping::map(const IfcSchema::IfcConnectedFaceSet* inst) { taxonomy::item* mapping::map_impl(const IfcSchema::IfcConnectedFaceSet* inst) {
return map_to_collection<taxonomy::shell>(this, inst->CfsFaces()); return map_to_collection<taxonomy::shell>(this, inst->CfsFaces());
} }
taxonomy::item* mapping::map(const IfcSchema::IfcFace* inst) { taxonomy::item* mapping::map_impl(const IfcSchema::IfcFace* inst) {
taxonomy::face* face = new taxonomy::face; taxonomy::face* face = new taxonomy::face;
auto bounds = inst->Bounds(); auto bounds = inst->Bounds();
for (auto& bound : *bounds) { for (auto& bound : *bounds) {
@@ -184,7 +184,7 @@ taxonomy::item* mapping::map(const IfcSchema::IfcFace* inst) {
return face; return face;
} }
taxonomy::item* mapping::map(const IfcSchema::IfcPolyLoop* inst) { taxonomy::item* mapping::map_impl(const IfcSchema::IfcPolyLoop* inst) {
taxonomy::loop* loop = new taxonomy::loop; taxonomy::loop* loop = new taxonomy::loop;
taxonomy::point3 first, previous; taxonomy::point3 first, previous;
@@ -218,7 +218,7 @@ taxonomy::item* mapping::map(const IfcSchema::IfcPolyLoop* inst) {
return loop; return loop;
} }
taxonomy::item* mapping::map(const IfcSchema::IfcCartesianPoint* inst) { taxonomy::item* mapping::map_impl(const IfcSchema::IfcCartesianPoint* inst) {
auto coords = inst->Coordinates(); auto coords = inst->Coordinates();
return new taxonomy::point3( return new taxonomy::point3(
coords.size() >= 1 ? coords[0] : 0., coords.size() >= 1 ? coords[0] : 0.,
@@ -227,38 +227,38 @@ taxonomy::item* mapping::map(const IfcSchema::IfcCartesianPoint* inst) {
); );
} }
taxonomy::item* mapping::map(const IfcSchema::IfcProduct* inst) { taxonomy::item* mapping::map_impl(const IfcSchema::IfcProduct* inst) {
auto n = new taxonomy::node; auto n = new taxonomy::node;
n->matrix = as<taxonomy::matrix4>(map(inst->ObjectPlacement())); n->matrix = as<taxonomy::matrix4>(map(inst->ObjectPlacement()));
return n; return n;
} }
taxonomy::item* mapping::map(const IfcSchema::IfcAxis2Placement3D* inst) { taxonomy::item* mapping::map_impl(const IfcSchema::IfcAxis2Placement3D* inst) {
// @todo length unit // @todo length unit
return new taxonomy::matrix4(); return new taxonomy::matrix4();
} }
taxonomy::item* mapping::map(const IfcSchema::IfcCartesianTransformationOperator2DnonUniform* inst) { taxonomy::item* mapping::map_impl(const IfcSchema::IfcCartesianTransformationOperator2DnonUniform* inst) {
// @todo length unit // @todo length unit
return new taxonomy::matrix4(); return new taxonomy::matrix4();
} }
taxonomy::item* mapping::map(const IfcSchema::IfcCartesianTransformationOperator3DnonUniform* inst) { taxonomy::item* mapping::map_impl(const IfcSchema::IfcCartesianTransformationOperator3DnonUniform* inst) {
// @todo length unit // @todo length unit
return new taxonomy::matrix4(); return new taxonomy::matrix4();
} }
taxonomy::item* mapping::map(const IfcSchema::IfcCartesianTransformationOperator2D* inst) { taxonomy::item* mapping::map_impl(const IfcSchema::IfcCartesianTransformationOperator2D* inst) {
// @todo length unit // @todo length unit
return new taxonomy::matrix4(); return new taxonomy::matrix4();
} }
taxonomy::item* mapping::map(const IfcSchema::IfcCartesianTransformationOperator3D* inst) { taxonomy::item* mapping::map_impl(const IfcSchema::IfcCartesianTransformationOperator3D* inst) {
// @todo length unit // @todo length unit
return new taxonomy::matrix4(); return new taxonomy::matrix4();
} }
taxonomy::item* mapping::map(const IfcSchema::IfcLocalPlacement* inst) { taxonomy::item* mapping::map_impl(const IfcSchema::IfcLocalPlacement* inst) {
// @todo length unit // @todo length unit
return new taxonomy::matrix4(); return new taxonomy::matrix4();
} }
@@ -672,7 +672,7 @@ namespace {
} }
} }
taxonomy::item* mapping::map(const IfcSchema::IfcMaterial* material) { taxonomy::item* mapping::map_impl(const IfcSchema::IfcMaterial* material) {
IfcSchema::IfcMaterialDefinitionRepresentation::list::ptr defs = material->HasRepresentation(); IfcSchema::IfcMaterialDefinitionRepresentation::list::ptr defs = material->HasRepresentation();
for (IfcSchema::IfcMaterialDefinitionRepresentation::list::it jt = defs->begin(); jt != defs->end(); ++jt) { for (IfcSchema::IfcMaterialDefinitionRepresentation::list::it jt = defs->begin(); jt != defs->end(); ++jt) {
IfcSchema::IfcRepresentation::list::ptr reps = (*jt)->Representations(); IfcSchema::IfcRepresentation::list::ptr reps = (*jt)->Representations();
@@ -693,7 +693,7 @@ taxonomy::item* mapping::map(const IfcSchema::IfcMaterial* material) {
// return &(style_cache[material->data().id()] = material_style); // return &(style_cache[material->data().id()] = material_style);
} }
taxonomy::item* mapping::map(const IfcSchema::IfcStyledItem* inst) { taxonomy::item* mapping::map_impl(const IfcSchema::IfcStyledItem* inst) {
static taxonomy::colour white = taxonomy::colour(1., 1., 1.); static taxonomy::colour white = taxonomy::colour(1., 1., 1.);
taxonomy::style* surface_style = new taxonomy::style; taxonomy::style* surface_style = new taxonomy::style;