Further propagate logger so that test succeeds

This commit is contained in:
Thomas Krijnen
2026-08-09 14:00:42 +02:00
parent a353edb9e0
commit 076f46cfeb
13 changed files with 32 additions and 32 deletions
+3 -3
View File
@@ -843,7 +843,7 @@ int main(int argc, char** argv) {
if (is_tesselated && (center_model || center_model_geometry)) { if (is_tesselated && (center_model || center_model_geometry)) {
std::vector<double> offset(3); std::vector<double> offset(3);
ifcopenshell::geom::iterator tmp_context_iterator(ifcopenshell::geom::kernels::construct(ifc_file, geometry_kernel, settings), settings, ifc_file, filter_funcs, num_threads, logger); ifcopenshell::geom::iterator tmp_context_iterator(ifcopenshell::geom::kernels::construct(ifc_file, geometry_kernel, settings, logger), settings, ifc_file, filter_funcs, num_threads, logger);
time_t bounds_start, bounds_end; time_t bounds_start, bounds_end;
time(&bounds_start); time(&bounds_start);
@@ -888,7 +888,7 @@ int main(int argc, char** argv) {
} }
std::unique_ptr<ifcopenshell::geom::iterator> context_iterator; std::unique_ptr<ifcopenshell::geom::iterator> context_iterator;
context_iterator.reset(new ifcopenshell::geom::iterator(ifcopenshell::geom::kernels::construct(ifc_file, geometry_kernel, settings), settings, ifc_file, filter_funcs, num_threads, logger)); context_iterator.reset(new ifcopenshell::geom::iterator(ifcopenshell::geom::kernels::construct(ifc_file, geometry_kernel, settings, logger), settings, ifc_file, filter_funcs, num_threads, logger));
logger.message(ifcopenshell::logger::LOG_PERF, "file geometry conversion"); logger.message(ifcopenshell::logger::LOG_PERF, "file geometry conversion");
@@ -1370,7 +1370,7 @@ void fix_quantities(ifcopenshell::file& f, bool no_progress, bool quiet, bool st
settings.get<ifcopenshell::geom::settings::ConvertBackUnits>().value = true; settings.get<ifcopenshell::geom::settings::ConvertBackUnits>().value = true;
settings.get<ifcopenshell::geom::settings::IteratorOutput>().value = ifcopenshell::geom::settings::NATIVE; settings.get<ifcopenshell::geom::settings::IteratorOutput>().value = ifcopenshell::geom::settings::NATIVE;
ifcopenshell::geom::iterator context_iterator(ifcopenshell::geom::kernels::construct(&f, "opencascade", settings), settings, &f, {}, 1, logger); ifcopenshell::geom::iterator context_iterator(ifcopenshell::geom::kernels::construct(&f, "opencascade", settings, logger), settings, &f, {}, 1, logger);
if (!context_iterator.initialize()) { if (!context_iterator.initialize()) {
return; return;
+1 -1
View File
@@ -54,7 +54,7 @@ void fix_spaceboundaries(ifcopenshell::file& f, bool no_progress, bool quiet, bo
settings.get<ifcopenshell::geom::settings::IteratorOutput>().value = ifcopenshell::geom::settings::NATIVE; settings.get<ifcopenshell::geom::settings::IteratorOutput>().value = ifcopenshell::geom::settings::NATIVE;
settings.get<ifcopenshell::geom::settings::DisableOpeningSubtractions>().value = true; settings.get<ifcopenshell::geom::settings::DisableOpeningSubtractions>().value = true;
ifcopenshell::geom::converter c(ifcopenshell::geom::kernels::construct(&f2, "cgal", settings), &f2, settings, logger); ifcopenshell::geom::converter c(ifcopenshell::geom::kernels::construct(&f2, "cgal", settings, logger), &f2, settings, logger);
std::map<std::set<std::string>, std::vector<Kernel_::Point_3>> elem_to_space_boundary_coords; std::map<std::set<std::string>, std::vector<Kernel_::Point_3>> elem_to_space_boundary_coords;
@@ -23,7 +23,7 @@ void fix_storeycontainment(ifcopenshell::file& f, bool no_progress, bool quiet,
ifcopenshell::geom::entity_filter(false, false, {"IfcOpeningElement", "IfcSpace"}) ifcopenshell::geom::entity_filter(false, false, {"IfcOpeningElement", "IfcSpace"})
}; };
ifcopenshell::geom::iterator context_iterator(ifcopenshell::geom::kernels::construct(&f, "cgal", settings), settings, &f, no_openings_and_spaces, 1, logger); ifcopenshell::geom::iterator context_iterator(ifcopenshell::geom::kernels::construct(&f, "cgal", settings, logger), settings, &f, no_openings_and_spaces, 1, logger);
auto get_elevation = [](const ifcopenshell::IfcBaseClass* a) { auto get_elevation = [](const ifcopenshell::IfcBaseClass* a) {
return ((const ifcopenshell::IfcBaseEntity*)a)->get_value<double>("Elevation", 0.); return ((const ifcopenshell::IfcBaseEntity*)a)->get_value<double>("Elevation", 0.);
@@ -23,7 +23,7 @@ void fix_wallconnectivity(ifcopenshell::file& f, bool no_progress, bool quiet, b
settings.get<ifcopenshell::geom::settings::OutputDimensionality>().value = ifcopenshell::geom::settings::CURVES; settings.get<ifcopenshell::geom::settings::OutputDimensionality>().value = ifcopenshell::geom::settings::CURVES;
ifcopenshell::geom::converter c(ifcopenshell::geom::kernels::construct(&f, "cgal", settings), &f, settings, logger); ifcopenshell::geom::converter c(ifcopenshell::geom::kernels::construct(&f, "cgal", settings, logger), &f, settings, logger);
auto rels = f.instances_by_type("IfcRelConnectsPathElements"); auto rels = f.instances_by_type("IfcRelConnectsPathElements");
std::map<std::set<const ifcopenshell::IfcBaseClass*>, const ifcopenshell::IfcBaseClass*> rel_by_elem; std::map<std::set<const ifcopenshell::IfcBaseClass*>, const ifcopenshell::IfcBaseClass*> rel_by_elem;
+1 -1
View File
@@ -460,7 +460,7 @@ struct intersection_validator {
ifcopenshell::geom::entity_filter(true, false, entities) ifcopenshell::geom::entity_filter(true, false, entities)
}; };
ifcopenshell::geom::iterator context_iterator(ifcopenshell::geom::kernels::construct(&f, "cgal", settings), settings, &f, spaces_and_walls, 1, logger); ifcopenshell::geom::iterator context_iterator(ifcopenshell::geom::kernels::construct(&f, "cgal", settings, logger), settings, &f, spaces_and_walls, 1, logger);
if (!context_iterator.initialize()) { if (!context_iterator.initialize()) {
return; return;
+6 -6
View File
@@ -124,12 +124,12 @@ bool ifcopenshell::geom::kernels::kernel_registry::has(const std::string& backen
return entries_.find(kernel_key(backend_id)) != entries_.end(); return entries_.find(kernel_key(backend_id)) != entries_.end();
} }
std::unique_ptr<ifcopenshell::geom::kernels::abstract_kernel> ifcopenshell::geom::kernels::kernel_registry::create(const std::string& backend_id, ifcopenshell::file* file, ifcopenshell::geom::settings& settings) const { std::unique_ptr<ifcopenshell::geom::kernels::abstract_kernel> ifcopenshell::geom::kernels::kernel_registry::create(const std::string& backend_id, ifcopenshell::file* file, ifcopenshell::geom::settings& settings, ifcopenshell::logger& logger) const {
const auto iter = entries_.find(kernel_key(backend_id)); const auto iter = entries_.find(kernel_key(backend_id));
if (iter == entries_.end()) { if (iter == entries_.end()) {
throw ifcopenshell::exception("No geometry kernel registered for " + backend_id); throw ifcopenshell::exception("No geometry kernel registered for " + backend_id);
} }
return std::unique_ptr<abstract_kernel>(iter->second.create_(file, settings)); return std::unique_ptr<abstract_kernel>(iter->second.create_(file, settings, logger));
} }
std::vector<ifcopenshell::geom::kernels::kernel_info> ifcopenshell::geom::kernels::kernel_registry::kernels() const { std::vector<ifcopenshell::geom::kernels::kernel_info> ifcopenshell::geom::kernels::kernel_registry::kernels() const {
@@ -145,7 +145,7 @@ ifcopenshell::geom::kernels::kernel_registry& ifcopenshell::geom::kernels::kerne
return registry; return registry;
} }
std::unique_ptr<ifcopenshell::geom::kernels::abstract_kernel> ifcopenshell::geom::kernels::construct(ifcopenshell::file* file, const std::string& geometry_library, ifcopenshell::geom::settings& settings) { std::unique_ptr<ifcopenshell::geom::kernels::abstract_kernel> ifcopenshell::geom::kernels::construct(ifcopenshell::file* file, const std::string& geometry_library, ifcopenshell::geom::settings& settings, ifcopenshell::logger& logger) {
auto geometry_library_lower = boost::to_lower_copy(geometry_library); auto geometry_library_lower = boost::to_lower_copy(geometry_library);
auto& registry = kernel_registry_instance(); auto& registry = kernel_registry_instance();
@@ -153,7 +153,7 @@ std::unique_ptr<ifcopenshell::geom::kernels::abstract_kernel> ifcopenshell::geom
load_kernel_plugin(registry, geometry_library_lower); load_kernel_plugin(registry, geometry_library_lower);
} }
if (registry.has(geometry_library_lower)) { if (registry.has(geometry_library_lower)) {
return registry.create(geometry_library_lower, file, settings); return registry.create(geometry_library_lower, file, settings, logger);
} }
if (geometry_library_lower.rfind("hybrid-", 0) == 0) { if (geometry_library_lower.rfind("hybrid-", 0) == 0) {
@@ -173,7 +173,7 @@ std::unique_ptr<ifcopenshell::geom::kernels::abstract_kernel> ifcopenshell::geom
throw ifcopenshell::exception("Invalid hybrid kernel; no match for prefix of " + geometry_library_lower); throw ifcopenshell::exception("Invalid hybrid kernel; no match for prefix of " + geometry_library_lower);
} }
kernels.push_back(registry.create(matched_backend_id, file, settings)); kernels.push_back(registry.create(matched_backend_id, file, settings, logger));
geometry_library_lower = geometry_library_lower.substr(matched_backend_id.size()); geometry_library_lower = geometry_library_lower.substr(matched_backend_id.size());
} }
@@ -183,7 +183,7 @@ std::unique_ptr<ifcopenshell::geom::kernels::abstract_kernel> ifcopenshell::geom
} }
if (!kernels.empty()) { if (!kernels.empty()) {
return std::make_unique<hybrid_kernel>(geometry_library, file, settings, std::move(kernels)); return std::make_unique<hybrid_kernel>(geometry_library, file, settings, std::move(kernels), logger);
} }
} }
+3 -3
View File
@@ -42,11 +42,11 @@ namespace ifcopenshell {
class IFC_GEOM_API kernel_registry { class IFC_GEOM_API kernel_registry {
public: public:
typedef std::function<abstract_kernel*(ifcopenshell::file*, ifcopenshell::geom::settings&)> create_fn; typedef std::function<abstract_kernel*(ifcopenshell::file*, ifcopenshell::geom::settings&, ifcopenshell::logger&)> create_fn;
void bind(const kernel_info& info, create_fn create, const ifcopenshell::plugin::module& module = ifcopenshell::plugin::module()); void bind(const kernel_info& info, create_fn create, const ifcopenshell::plugin::module& module = ifcopenshell::plugin::module());
bool has(const std::string& backend_id) const; bool has(const std::string& backend_id) const;
std::unique_ptr<abstract_kernel> create(const std::string& backend_id, ifcopenshell::file* file, ifcopenshell::geom::settings& settings) const; std::unique_ptr<abstract_kernel> create(const std::string& backend_id, ifcopenshell::file* file, ifcopenshell::geom::settings& settings, ifcopenshell::logger& logger) const;
std::vector<kernel_info> kernels() const; std::vector<kernel_info> kernels() const;
private: private:
@@ -60,7 +60,7 @@ namespace ifcopenshell {
}; };
IFC_GEOM_API kernel_registry& kernel_registry_instance(); IFC_GEOM_API kernel_registry& kernel_registry_instance();
IFC_GEOM_API std::unique_ptr<abstract_kernel> construct(ifcopenshell::file* file, const std::string& geometry_library, ifcopenshell::geom::settings& settings); IFC_GEOM_API std::unique_ptr<abstract_kernel> construct(ifcopenshell::file* file, const std::string& geometry_library, ifcopenshell::geom::settings& settings, ifcopenshell::logger& logger = ifcopenshell::logger::root());
} }
} }
+2 -2
View File
@@ -51,8 +51,8 @@ namespace ifcopenshell {
return kernel_plugin_metadata(plugin_name); return kernel_plugin_metadata(plugin_name);
} }
abstract_kernel* create_kernel(ifcopenshell::file*, ifcopenshell::geom::settings& settings) { abstract_kernel* create_kernel(ifcopenshell::file*, ifcopenshell::geom::settings& settings, ifcopenshell::logger& logger) {
return new kernel_type(settings); return new kernel_type(settings, logger);
} }
void register_plugin(kernel_registry& registry, const plugin::module& module) { void register_plugin(kernel_registry& registry, const plugin::module& module) {
+2 -2
View File
@@ -35,8 +35,8 @@ namespace ifcopenshell {
return kernel_plugin_metadata("manifold"); return kernel_plugin_metadata("manifold");
} }
abstract_kernel* create_kernel(ifcopenshell::file*, ifcopenshell::geom::settings& settings) { abstract_kernel* create_kernel(ifcopenshell::file*, ifcopenshell::geom::settings& settings, ifcopenshell::logger& logger) {
return new manifold_kernel(settings); return new manifold_kernel(settings, logger);
} }
void register_plugin(kernel_registry& registry, const plugin::module& module) { void register_plugin(kernel_registry& registry, const plugin::module& module) {
+2 -2
View File
@@ -35,8 +35,8 @@ namespace ifcopenshell {
return kernel_plugin_metadata("opencascade"); return kernel_plugin_metadata("opencascade");
} }
abstract_kernel* create_kernel(ifcopenshell::file*, ifcopenshell::geom::settings& settings) { abstract_kernel* create_kernel(ifcopenshell::file*, ifcopenshell::geom::settings& settings, ifcopenshell::logger& logger) {
return new ifcopenshell::geom::open_cascade_kernel(settings); return new ifcopenshell::geom::open_cascade_kernel(settings, logger);
} }
void register_plugin(kernel_registry& registry, const plugin::module& module) { void register_plugin(kernel_registry& registry, const plugin::module& module) {
+2 -2
View File
@@ -35,8 +35,8 @@ namespace ifcopenshell {
return kernel_plugin_metadata("passthrough"); return kernel_plugin_metadata("passthrough");
} }
abstract_kernel* create_kernel(ifcopenshell::file*, ifcopenshell::geom::settings& settings) { abstract_kernel* create_kernel(ifcopenshell::file*, ifcopenshell::geom::settings& settings, ifcopenshell::logger& logger) {
return new passthrough_kernel(settings); return new passthrough_kernel(settings, logger);
} }
void register_plugin(kernel_registry& registry, const plugin::module& module) { void register_plugin(kernel_registry& registry, const plugin::module& module) {
@@ -63,7 +63,7 @@ std::size_t count_geo403_for_wall(hierarchy_helper<IfcSchema>& file, const IfcSc
ifcopenshell::logger log; ifcopenshell::logger log;
log.output_format(ifcopenshell::logger::FMT_INMEMORY); log.output_format(ifcopenshell::logger::FMT_INMEMORY);
ifcopenshell::geom::converter converter( ifcopenshell::geom::converter converter(
ifcopenshell::geom::kernels::construct(&file, "opencascade", settings), &file, settings, log); ifcopenshell::geom::kernels::construct(&file, "opencascade", settings, log), &file, settings, log);
delete converter.create_brep_for_representation_and_product(wall.Representation().Representations().back(), wall); delete converter.create_brep_for_representation_and_product(wall.Representation().Representations().back(), wall);
return log.count("GEO403"); return log.count("GEO403");
} }
@@ -94,7 +94,7 @@ IfcSchema::IfcRepresentation select_representation(
ifcopenshell::logger log; ifcopenshell::logger log;
log.output_format(ifcopenshell::logger::FMT_INMEMORY); log.output_format(ifcopenshell::logger::FMT_INMEMORY);
ifcopenshell::geom::converter converter( ifcopenshell::geom::converter converter(
ifcopenshell::geom::kernels::construct(&file, "passthrough", settings), &file, settings, log); ifcopenshell::geom::kernels::construct(&file, "passthrough", settings, log), &file, settings, log);
auto selected = converter.mapping()->representation_of(wall).as<IfcSchema::IfcRepresentation>(); auto selected = converter.mapping()->representation_of(wall).as<IfcSchema::IfcRepresentation>();
REQUIRE(selected); REQUIRE(selected);
@@ -126,7 +126,7 @@ std::vector<ifcopenshell::geom::geometry_conversion_task> representation_tasks(
ifcopenshell::logger log; ifcopenshell::logger log;
log.output_format(ifcopenshell::logger::FMT_INMEMORY); log.output_format(ifcopenshell::logger::FMT_INMEMORY);
ifcopenshell::geom::converter converter( ifcopenshell::geom::converter converter(
ifcopenshell::geom::kernels::construct(&file, "passthrough", settings), &file, settings, log); ifcopenshell::geom::kernels::construct(&file, "passthrough", settings, log), &file, settings, log);
std::vector<ifcopenshell::geom::geometry_conversion_task> tasks; std::vector<ifcopenshell::geom::geometry_conversion_task> tasks;
std::vector<ifcopenshell::geom::filter_function> filters; std::vector<ifcopenshell::geom::filter_function> filters;
+5 -5
View File
@@ -761,14 +761,14 @@ struct shape_rtti : public boost::static_visitor<PyObject*>
// anyway it does not matter as SWIG generates C code without actual constructors // anyway it does not matter as SWIG generates C code without actual constructors
ifcopenshell::geom::iterator* construct_iterator(const std::string& geometry_library, ifcopenshell::geom::settings settings, ifcopenshell::file* file, int num_threads, ifcopenshell::logger* logger = nullptr) { ifcopenshell::geom::iterator* construct_iterator(const std::string& geometry_library, ifcopenshell::geom::settings settings, ifcopenshell::file* file, int num_threads, ifcopenshell::logger* logger = nullptr) {
ifcopenshell::logger& logger_ = ifcopenshell::logger_or_root(logger); ifcopenshell::logger& logger_ = ifcopenshell::logger_or_root(logger);
return new ifcopenshell::geom::iterator(ifcopenshell::geom::kernels::construct(file, geometry_library, settings), settings, file, num_threads, logger_); return new ifcopenshell::geom::iterator(ifcopenshell::geom::kernels::construct(file, geometry_library, settings, logger_), settings, file, num_threads, logger_);
} }
ifcopenshell::geom::iterator* construct_iterator_with_include_exclude(const std::string& geometry_library, ifcopenshell::geom::settings settings, ifcopenshell::file* file, std::vector<std::string> elems, bool include, int num_threads, ifcopenshell::logger* logger = nullptr) { ifcopenshell::geom::iterator* construct_iterator_with_include_exclude(const std::string& geometry_library, ifcopenshell::geom::settings settings, ifcopenshell::file* file, std::vector<std::string> elems, bool include, int num_threads, ifcopenshell::logger* logger = nullptr) {
ifcopenshell::logger& logger_ = ifcopenshell::logger_or_root(logger); ifcopenshell::logger& logger_ = ifcopenshell::logger_or_root(logger);
std::set<std::string> elems_set(elems.begin(), elems.end()); std::set<std::string> elems_set(elems.begin(), elems.end());
ifcopenshell::geom::entity_filter ef{ include, false, elems_set }; ifcopenshell::geom::entity_filter ef{ include, false, elems_set };
return new ifcopenshell::geom::iterator(ifcopenshell::geom::kernels::construct(file, geometry_library, settings), settings, file, {ef}, num_threads, logger_); return new ifcopenshell::geom::iterator(ifcopenshell::geom::kernels::construct(file, geometry_library, settings, logger_), settings, file, {ef}, num_threads, logger_);
} }
ifcopenshell::geom::iterator* construct_iterator_with_include_exclude_globalid(const std::string& geometry_library, ifcopenshell::geom::settings settings, ifcopenshell::file* file, std::vector<std::string> elems, bool include, int num_threads, ifcopenshell::logger* logger = nullptr) { ifcopenshell::geom::iterator* construct_iterator_with_include_exclude_globalid(const std::string& geometry_library, ifcopenshell::geom::settings settings, ifcopenshell::file* file, std::vector<std::string> elems, bool include, int num_threads, ifcopenshell::logger* logger = nullptr) {
@@ -778,14 +778,14 @@ struct shape_rtti : public boost::static_visitor<PyObject*>
af.attribute_name = "GlobalId"; af.attribute_name = "GlobalId";
af.populate(elems_set); af.populate(elems_set);
af.include = include; af.include = include;
return new ifcopenshell::geom::iterator(ifcopenshell::geom::kernels::construct(file, geometry_library, settings), settings, file, {af}, num_threads, logger_); return new ifcopenshell::geom::iterator(ifcopenshell::geom::kernels::construct(file, geometry_library, settings, logger_), settings, file, {af}, num_threads, logger_);
} }
ifcopenshell::geom::iterator* construct_iterator_with_include_exclude_id(const std::string& geometry_library, ifcopenshell::geom::settings settings, ifcopenshell::file* file, std::vector<int> elems, bool include, int num_threads, ifcopenshell::logger* logger = nullptr) { ifcopenshell::geom::iterator* construct_iterator_with_include_exclude_id(const std::string& geometry_library, ifcopenshell::geom::settings settings, ifcopenshell::file* file, std::vector<int> elems, bool include, int num_threads, ifcopenshell::logger* logger = nullptr) {
ifcopenshell::logger& logger_ = ifcopenshell::logger_or_root(logger); ifcopenshell::logger& logger_ = ifcopenshell::logger_or_root(logger);
std::set<int> elems_set(elems.begin(), elems.end()); std::set<int> elems_set(elems.begin(), elems.end());
ifcopenshell::geom::instance_id_filter af(include, false, elems_set); ifcopenshell::geom::instance_id_filter af(include, false, elems_set);
return new ifcopenshell::geom::iterator(ifcopenshell::geom::kernels::construct(file, geometry_library, settings), settings, file, {af}, num_threads, logger_); return new ifcopenshell::geom::iterator(ifcopenshell::geom::kernels::construct(file, geometry_library, settings, logger_), settings, file, {af}, num_threads, logger_);
} }
%} %}
@@ -993,7 +993,7 @@ struct shape_rtti : public boost::static_visitor<PyObject*>
static std::variant<ifcopenshell::geom::element*, ifcopenshell::geom::representation*, ifcopenshell::geom::transformation*> helper_fn_create_shape(ifcopenshell::logger& logger, const std::string& geometry_library, ifcopenshell::geom::settings& settings, const express::base& instance, const express::base& representation = express::base()) { static std::variant<ifcopenshell::geom::element*, ifcopenshell::geom::representation*, ifcopenshell::geom::transformation*> helper_fn_create_shape(ifcopenshell::logger& logger, const std::string& geometry_library, ifcopenshell::geom::settings& settings, const express::base& instance, const express::base& representation = express::base()) {
ifcopenshell::file* file = instance.file(); ifcopenshell::file* file = instance.file();
ifcopenshell::geom::converter kernel(ifcopenshell::geom::kernels::construct(file, geometry_library, settings), file, settings, logger); ifcopenshell::geom::converter kernel(ifcopenshell::geom::kernels::construct(file, geometry_library, settings, logger), file, settings, logger);
if (instance.declaration().is("IfcProduct")) { if (instance.declaration().is("IfcProduct")) {
if (representation && !representation.declaration().is("IfcRepresentation")) { if (representation && !representation.declaration().is("IfcRepresentation")) {
throw ifcopenshell::exception("Supplied representation not of type IfcRepresentation"); throw ifcopenshell::exception("Supplied representation not of type IfcRepresentation");