diff --git a/src/ifcconvert/IfcConvert.cpp b/src/ifcconvert/IfcConvert.cpp index afe407df8f..6155bc4c43 100644 --- a/src/ifcconvert/IfcConvert.cpp +++ b/src/ifcconvert/IfcConvert.cpp @@ -843,7 +843,7 @@ int main(int argc, char** argv) { if (is_tesselated && (center_model || center_model_geometry)) { std::vector 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(&bounds_start); @@ -888,7 +888,7 @@ int main(int argc, char** argv) { } std::unique_ptr 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"); @@ -1370,7 +1370,7 @@ void fix_quantities(ifcopenshell::file& f, bool no_progress, bool quiet, bool st settings.get().value = true; settings.get().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()) { return; diff --git a/src/ifcconvert/validate_space_boundaries.cpp b/src/ifcconvert/validate_space_boundaries.cpp index c90eeeee1b..4266f48332 100644 --- a/src/ifcconvert/validate_space_boundaries.cpp +++ b/src/ifcconvert/validate_space_boundaries.cpp @@ -54,7 +54,7 @@ void fix_spaceboundaries(ifcopenshell::file& f, bool no_progress, bool quiet, bo settings.get().value = ifcopenshell::geom::settings::NATIVE; settings.get().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::vector> elem_to_space_boundary_coords; diff --git a/src/ifcconvert/validate_storey_containment.cpp b/src/ifcconvert/validate_storey_containment.cpp index a445b06d40..f4bf0781c1 100644 --- a/src/ifcconvert/validate_storey_containment.cpp +++ b/src/ifcconvert/validate_storey_containment.cpp @@ -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::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) { return ((const ifcopenshell::IfcBaseEntity*)a)->get_value("Elevation", 0.); diff --git a/src/ifcconvert/validate_wall_connectivity.cpp b/src/ifcconvert/validate_wall_connectivity.cpp index 7c44821f84..8777349934 100644 --- a/src/ifcconvert/validate_wall_connectivity.cpp +++ b/src/ifcconvert/validate_wall_connectivity.cpp @@ -23,7 +23,7 @@ void fix_wallconnectivity(ifcopenshell::file& f, bool no_progress, bool quiet, b settings.get().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"); std::map, const ifcopenshell::IfcBaseClass*> rel_by_elem; diff --git a/src/ifcconvert/validation_utils.h b/src/ifcconvert/validation_utils.h index 4f99e6cb20..caa5dccfa9 100644 --- a/src/ifcconvert/validation_utils.h +++ b/src/ifcconvert/validation_utils.h @@ -460,7 +460,7 @@ struct intersection_validator { 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()) { return; diff --git a/src/ifcgeom/kernel_registry.cpp b/src/ifcgeom/kernel_registry.cpp index ec35a9d5ae..d2657ca8e7 100644 --- a/src/ifcgeom/kernel_registry.cpp +++ b/src/ifcgeom/kernel_registry.cpp @@ -124,12 +124,12 @@ bool ifcopenshell::geom::kernels::kernel_registry::has(const std::string& backen return entries_.find(kernel_key(backend_id)) != entries_.end(); } -std::unique_ptr 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::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)); if (iter == entries_.end()) { throw ifcopenshell::exception("No geometry kernel registered for " + backend_id); } - return std::unique_ptr(iter->second.create_(file, settings)); + return std::unique_ptr(iter->second.create_(file, settings, logger)); } std::vector ifcopenshell::geom::kernels::kernel_registry::kernels() const { @@ -145,7 +145,7 @@ ifcopenshell::geom::kernels::kernel_registry& ifcopenshell::geom::kernels::kerne return registry; } -std::unique_ptr ifcopenshell::geom::kernels::construct(ifcopenshell::file* file, const std::string& geometry_library, ifcopenshell::geom::settings& settings) { +std::unique_ptr 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& registry = kernel_registry_instance(); @@ -153,7 +153,7 @@ std::unique_ptr ifcopenshell::geom load_kernel_plugin(registry, 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) { @@ -173,7 +173,7 @@ std::unique_ptr ifcopenshell::geom 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()); } @@ -183,7 +183,7 @@ std::unique_ptr ifcopenshell::geom } if (!kernels.empty()) { - return std::make_unique(geometry_library, file, settings, std::move(kernels)); + return std::make_unique(geometry_library, file, settings, std::move(kernels), logger); } } diff --git a/src/ifcgeom/kernel_registry.h b/src/ifcgeom/kernel_registry.h index 71d37123eb..be0fdba888 100644 --- a/src/ifcgeom/kernel_registry.h +++ b/src/ifcgeom/kernel_registry.h @@ -42,11 +42,11 @@ namespace ifcopenshell { class IFC_GEOM_API kernel_registry { public: - typedef std::function create_fn; + typedef std::function create_fn; 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; - std::unique_ptr create(const std::string& backend_id, ifcopenshell::file* file, ifcopenshell::geom::settings& settings) const; + std::unique_ptr create(const std::string& backend_id, ifcopenshell::file* file, ifcopenshell::geom::settings& settings, ifcopenshell::logger& logger) const; std::vector kernels() const; private: @@ -60,7 +60,7 @@ namespace ifcopenshell { }; IFC_GEOM_API kernel_registry& kernel_registry_instance(); - IFC_GEOM_API std::unique_ptr construct(ifcopenshell::file* file, const std::string& geometry_library, ifcopenshell::geom::settings& settings); + IFC_GEOM_API std::unique_ptr construct(ifcopenshell::file* file, const std::string& geometry_library, ifcopenshell::geom::settings& settings, ifcopenshell::logger& logger = ifcopenshell::logger::root()); } } diff --git a/src/ifcgeom/kernels/cgal/plugin.cpp b/src/ifcgeom/kernels/cgal/plugin.cpp index b1a0273ddb..032c3e9fe8 100644 --- a/src/ifcgeom/kernels/cgal/plugin.cpp +++ b/src/ifcgeom/kernels/cgal/plugin.cpp @@ -51,8 +51,8 @@ namespace ifcopenshell { return kernel_plugin_metadata(plugin_name); } - abstract_kernel* create_kernel(ifcopenshell::file*, ifcopenshell::geom::settings& settings) { - return new kernel_type(settings); + abstract_kernel* create_kernel(ifcopenshell::file*, ifcopenshell::geom::settings& settings, ifcopenshell::logger& logger) { + return new kernel_type(settings, logger); } void register_plugin(kernel_registry& registry, const plugin::module& module) { diff --git a/src/ifcgeom/kernels/manifold/plugin.cpp b/src/ifcgeom/kernels/manifold/plugin.cpp index 9bda410341..42217926d4 100644 --- a/src/ifcgeom/kernels/manifold/plugin.cpp +++ b/src/ifcgeom/kernels/manifold/plugin.cpp @@ -35,8 +35,8 @@ namespace ifcopenshell { return kernel_plugin_metadata("manifold"); } - abstract_kernel* create_kernel(ifcopenshell::file*, ifcopenshell::geom::settings& settings) { - return new manifold_kernel(settings); + abstract_kernel* create_kernel(ifcopenshell::file*, ifcopenshell::geom::settings& settings, ifcopenshell::logger& logger) { + return new manifold_kernel(settings, logger); } void register_plugin(kernel_registry& registry, const plugin::module& module) { diff --git a/src/ifcgeom/kernels/opencascade/plugin.cpp b/src/ifcgeom/kernels/opencascade/plugin.cpp index 903a225482..d745f52fe3 100644 --- a/src/ifcgeom/kernels/opencascade/plugin.cpp +++ b/src/ifcgeom/kernels/opencascade/plugin.cpp @@ -35,8 +35,8 @@ namespace ifcopenshell { return kernel_plugin_metadata("opencascade"); } - abstract_kernel* create_kernel(ifcopenshell::file*, ifcopenshell::geom::settings& settings) { - return new ifcopenshell::geom::open_cascade_kernel(settings); + abstract_kernel* create_kernel(ifcopenshell::file*, ifcopenshell::geom::settings& settings, ifcopenshell::logger& logger) { + return new ifcopenshell::geom::open_cascade_kernel(settings, logger); } void register_plugin(kernel_registry& registry, const plugin::module& module) { diff --git a/src/ifcgeom/kernels/passthrough/plugin.cpp b/src/ifcgeom/kernels/passthrough/plugin.cpp index 17e08ac4bf..7c5046e4c6 100644 --- a/src/ifcgeom/kernels/passthrough/plugin.cpp +++ b/src/ifcgeom/kernels/passthrough/plugin.cpp @@ -35,8 +35,8 @@ namespace ifcopenshell { return kernel_plugin_metadata("passthrough"); } - abstract_kernel* create_kernel(ifcopenshell::file*, ifcopenshell::geom::settings& settings) { - return new passthrough_kernel(settings); + abstract_kernel* create_kernel(ifcopenshell::file*, ifcopenshell::geom::settings& settings, ifcopenshell::logger& logger) { + return new passthrough_kernel(settings, logger); } void register_plugin(kernel_registry& registry, const plugin::module& module) { diff --git a/src/ifcgeom/tests/test_ifcopenshell_geometry.cpp b/src/ifcgeom/tests/test_ifcopenshell_geometry.cpp index 272f9a839c..63f20538dc 100644 --- a/src/ifcgeom/tests/test_ifcopenshell_geometry.cpp +++ b/src/ifcgeom/tests/test_ifcopenshell_geometry.cpp @@ -63,7 +63,7 @@ std::size_t count_geo403_for_wall(hierarchy_helper& file, const IfcSc ifcopenshell::logger log; log.output_format(ifcopenshell::logger::FMT_INMEMORY); 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); return log.count("GEO403"); } @@ -94,7 +94,7 @@ IfcSchema::IfcRepresentation select_representation( ifcopenshell::logger log; log.output_format(ifcopenshell::logger::FMT_INMEMORY); 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(); REQUIRE(selected); @@ -126,7 +126,7 @@ std::vector representation_tasks( ifcopenshell::logger log; log.output_format(ifcopenshell::logger::FMT_INMEMORY); 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 tasks; std::vector filters; diff --git a/src/ifcwrap/IfcGeomWrapper.i b/src/ifcwrap/IfcGeomWrapper.i index 9322d7340a..04235b6093 100644 --- a/src/ifcwrap/IfcGeomWrapper.i +++ b/src/ifcwrap/IfcGeomWrapper.i @@ -761,14 +761,14 @@ struct shape_rtti : public boost::static_visitor // 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::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 elems, bool include, int num_threads, ifcopenshell::logger* logger = nullptr) { ifcopenshell::logger& logger_ = ifcopenshell::logger_or_root(logger); std::set elems_set(elems.begin(), elems.end()); 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 elems, bool include, int num_threads, ifcopenshell::logger* logger = nullptr) { @@ -778,14 +778,14 @@ struct shape_rtti : public boost::static_visitor af.attribute_name = "GlobalId"; af.populate(elems_set); 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 elems, bool include, int num_threads, ifcopenshell::logger* logger = nullptr) { ifcopenshell::logger& logger_ = ifcopenshell::logger_or_root(logger); std::set elems_set(elems.begin(), elems.end()); 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 static std::variant 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::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 (representation && !representation.declaration().is("IfcRepresentation")) { throw ifcopenshell::exception("Supplied representation not of type IfcRepresentation");