mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-30 16:43:00 +00:00
Route boolean-op kernel logging through the injected Logger
src/ifcgeom/kernels/opencascade/boolean_utils.cpp, OpenCascadeKernel.cpp, and boolean_result.cpp logged diagnostics (including the "Processed fully in 2D" family of messages) through the global Logger::Root() singleton. IfcConvert's main() constructs its own Logger and wires it to --log-file via SetOutput(), then threads that instance through Converter/kernel constructors as logger_ (see AbstractKernel). Since Logger::Root() is never itself configured with an output stream, every Notice/Warning/Message call through it was silently dropped instead of reaching the log file - Logger::Message's log1_/log2_ null checks just no-op. This made src/ifcopenshell-python/test/test_wall_opening.py fail: it asserts on specific log messages that the underlying boolean-op code was still emitting correctly, just to nowhere. The geometry itself was never wrong. Add a Logger*, defaulting to null, to boolean_settings (with a log() accessor falling back to Logger::Root() for the few remaining call sites with no injected logger available), thread it through eliminate_narrow_operands and boolean_subtraction_2d_using_builder, and have OpenCascadeKernel/boolean_result.cpp populate it from their inherited logger_ member instead of relying on the global singleton. Generated with the assistance of an AI coding tool.
This commit is contained in:
@@ -118,14 +118,14 @@ bool OpenCascadeKernel::convert_impl(const taxonomy::boolean_result::ptr br, Con
|
||||
|
||||
const double first_operand_volume = util::shape_volume(a);
|
||||
if (first_operand_volume <= ALMOST_ZERO) {
|
||||
Logger::Root().Message(Logger::LOG_WARNING, "GEO", 119, "Empty solid for:", c->instance);
|
||||
logger_.Message(Logger::LOG_WARNING, "GEO", 119, "Empty solid for:", c->instance);
|
||||
}
|
||||
} else {
|
||||
|
||||
for (auto& r : cr) {
|
||||
auto S = std::static_pointer_cast<OpenCascadeShape>(r.Shape())->shape();
|
||||
if (S.IsNull()) {
|
||||
Logger::Root().Error("GEO", 120, "Null operand");
|
||||
logger_.Error("GEO", 120, "Null operand");
|
||||
continue;
|
||||
}
|
||||
gp_GTrsf trsf;
|
||||
@@ -140,7 +140,7 @@ bool OpenCascadeKernel::convert_impl(const taxonomy::boolean_result::ptr br, Con
|
||||
// #2665 we also set a precision-independent threshold, because in the boolean op routine
|
||||
// the working fuzziness might still be increased.
|
||||
if (d < tol * 20. || d < 0.00002) {
|
||||
Logger::Root().Message(Logger::LOG_WARNING, "GEO", 121, "Halfspace subtraction yields unchanged volume:", c->instance);
|
||||
logger_.Message(Logger::LOG_WARNING, "GEO", 121, "Halfspace subtraction yields unchanged volume:", c->instance);
|
||||
continue;
|
||||
} else {
|
||||
S = result;
|
||||
@@ -159,6 +159,7 @@ bool OpenCascadeKernel::convert_impl(const taxonomy::boolean_result::ptr br, Con
|
||||
bst.attempt_2d = settings_.get<settings::BooleanAttempt2d>().get();
|
||||
bst.debug = settings_.get<settings::DebugBooleanOperations>().get();
|
||||
bst.precision = settings_.get<settings::Precision>().get();
|
||||
bst.logger = &logger_;
|
||||
|
||||
TopoDS_Shape r;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user