mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-23 20:26:22 +00:00
Catch failures to convert Nef to Polyhedron_3
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user