Catch failures to convert Nef to Polyhedron_3

This commit is contained in:
Ken Arroyo Ohori
2017-04-10 18:53:28 -05:00
parent f03a228280
commit 248c73c2ab
2 changed files with 46 additions and 12 deletions
+36 -10
View File
@@ -100,8 +100,14 @@ bool IfcGeom::CgalKernel::convert(const IfcSchema::IfcExtrudedAreaSolid *l, cgal
nef_shape.transform(trsf); nef_shape.transform(trsf);
} }
nef_shape.convert_to_polyhedron(shape); try {
return true; nef_shape.convert_to_polyhedron(shape);
return true;
} catch (...) {
std::cout << "IfcExtrudedAreaSolid: cannot convert Nef to polyhedron!" << std::endl;
return false;
}
} }
#ifdef USE_IFC4 #ifdef USE_IFC4
@@ -244,8 +250,13 @@ bool IfcGeom::CgalKernel::convert(const IfcSchema::IfcExtrudedAreaSolidTapered*
nef_shape.transform(trsf); nef_shape.transform(trsf);
} }
nef_shape.convert_to_polyhedron(shape); try {
return true; nef_shape.convert_to_polyhedron(shape);
return true;
} catch (...) {
std::cout << "IfcExtrudedAreaSolidTapered: cannot convert Nef to polyhedron!" << std::endl;
return false;
}
} }
#endif #endif
@@ -458,8 +469,13 @@ bool IfcGeom::CgalKernel::convert(const IfcSchema::IfcBooleanResult* l, cgal_sha
// fresult.open("/Users/ken/Desktop/result.off"); // fresult.open("/Users/ken/Desktop/result.off");
// fresult << result << std::endl; // fresult << result << std::endl;
// fresult.close(); // fresult.close();
} nef_result.convert_to_polyhedron(shape); } try {
return true; nef_result.convert_to_polyhedron(shape);
return true;
} catch (...) {
std::cout << "IfcBooleanResult: cannot convert Nef to polyhedron!" << std::endl;
return false;
}
} else if (op == IfcSchema::IfcBooleanOperator::IfcBooleanOperator_UNION) { } else if (op == IfcSchema::IfcBooleanOperator::IfcBooleanOperator_UNION) {
@@ -475,8 +491,13 @@ bool IfcGeom::CgalKernel::convert(const IfcSchema::IfcBooleanResult* l, cgal_sha
// fresult.open("/Users/ken/Desktop/result.off"); // fresult.open("/Users/ken/Desktop/result.off");
// fresult << result << std::endl; // fresult << result << std::endl;
// fresult.close(); // fresult.close();
} nef_result.convert_to_polyhedron(shape); } try {
return true; nef_result.convert_to_polyhedron(shape);
return true;
} catch (...) {
std::cout << "IfcBooleanResult: cannot convert Nef to polyhedron!" << std::endl;
return false;
}
} else if (op == IfcSchema::IfcBooleanOperator::IfcBooleanOperator_INTERSECTION) { } else if (op == IfcSchema::IfcBooleanOperator::IfcBooleanOperator_INTERSECTION) {
@@ -492,8 +513,13 @@ bool IfcGeom::CgalKernel::convert(const IfcSchema::IfcBooleanResult* l, cgal_sha
// fresult.open("/Users/ken/Desktop/result.off"); // fresult.open("/Users/ken/Desktop/result.off");
// fresult << result << std::endl; // fresult << result << std::endl;
// fresult.close(); // fresult.close();
} nef_result.convert_to_polyhedron(shape); } try {
return true; nef_result.convert_to_polyhedron(shape);
return true;
} catch (...) {
std::cout << "IfcBooleanResult: cannot convert Nef to polyhedron!" << std::endl;
return false;
}
} return false; } return false;
} }
+10 -2
View File
@@ -300,8 +300,16 @@ bool IfcGeom::CgalKernel::convert_openings(const IfcSchema::IfcProduct* entity,
} }
if (brep_cut_result.is_valid()) { if (brep_cut_result.is_valid()) {
nef_brep_cut_result.convert_to_Polyhedron(brep_cut_result); try {
cut_shapes.push_back(IfcGeom::ConversionResult(new CgalShape(brep_cut_result), &it3->Style())); nef_brep_cut_result.convert_to_polyhedron(brep_cut_result);
cut_shapes.push_back(IfcGeom::ConversionResult(new CgalShape(brep_cut_result), &it3->Style()));
} catch (...) {
// Apparently processing the boolean operation failed or resulted in an invalid result
// in which case the original shape without the subtractions is returned instead
// we try convert the openings in the original way, one by one.
Logger::Message(Logger::LOG_WARNING, "Subtracting combined openings compound failed:", entity->entity);
return false;
}
} else { } else {
// Apparently processing the boolean operation failed or resulted in an invalid result // Apparently processing the boolean operation failed or resulted in an invalid result
// in which case the original shape without the subtractions is returned instead // in which case the original shape without the subtractions is returned instead