From 616c7a00d5f349297ac928ced510bfe3ea78f622 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Sat, 8 Aug 2026 15:45:04 +0200 Subject: [PATCH] Inline conversion result vectors Generated with the assistance of an AI coding tool. --- src/ifcgeom/abstract_kernel.cpp | 16 ++-- src/ifcgeom/abstract_kernel.h | 84 +++++++++---------- src/ifcgeom/conversion_result.h | 4 +- src/ifcgeom/converter.cpp | 12 +-- src/ifcgeom/converter.h | 2 +- src/ifcgeom/hybrid_kernel.h | 8 +- src/ifcgeom/kernels/cgal/cgal_kernel.cpp | 14 ++-- src/ifcgeom/kernels/cgal/cgal_kernel.h | 10 +-- .../kernels/manifold/manifold_kernel.cpp | 20 ++--- .../kernels/manifold/manifold_kernel.h | 10 +-- .../kernels/opencascade/base_utils.cpp | 4 +- src/ifcgeom/kernels/opencascade/base_utils.h | 2 +- .../kernels/opencascade/boolean_result.cpp | 4 +- src/ifcgeom/kernels/opencascade/extrusion.cpp | 2 +- src/ifcgeom/kernels/opencascade/face.cpp | 2 +- src/ifcgeom/kernels/opencascade/layerset.cpp | 14 ++-- src/ifcgeom/kernels/opencascade/layerset.h | 4 +- src/ifcgeom/kernels/opencascade/loft.cpp | 2 +- src/ifcgeom/kernels/opencascade/loop.cpp | 4 +- .../opencascade/opencascade_kernel.cpp | 36 ++++---- .../kernels/opencascade/opencascade_kernel.h | 24 +++--- src/ifcgeom/kernels/opencascade/shell.cpp | 2 +- src/ifcgeom/kernels/opencascade/solid.cpp | 2 +- .../kernels/opencascade/sweep_along_curve.cpp | 2 +- .../passthrough/passthrough_kernel.cpp | 8 +- .../kernels/passthrough/passthrough_kernel.h | 8 +- src/ifcgeom/representation.cpp | 4 +- src/ifcgeom/representation.h | 10 +-- src/ifcwrap/IfcGeomWrapper.i | 2 +- 29 files changed, 157 insertions(+), 159 deletions(-) diff --git a/src/ifcgeom/abstract_kernel.cpp b/src/ifcgeom/abstract_kernel.cpp index ac9826dce9..012bbfc5f4 100644 --- a/src/ifcgeom/abstract_kernel.cpp +++ b/src/ifcgeom/abstract_kernel.cpp @@ -15,7 +15,7 @@ const char* ifcopenshell::not_supported_error::what() const noexcept { return "Not supported."; } -bool ifcopenshell::geom::kernels::abstract_kernel::convert(const taxonomy::ptr item, ifcopenshell::geom::conversion_results& results) { +bool ifcopenshell::geom::kernels::abstract_kernel::convert(const taxonomy::ptr item, std::vector& results) { if (settings_.get().get()) { auto it = cache_.find(item); if (it != cache_.end()) { @@ -67,7 +67,7 @@ const ifcopenshell::geom::settings& ifcopenshell::geom::kernels::abstract_kernel return settings_; } -bool ifcopenshell::geom::kernels::abstract_kernel::convert_impl(const taxonomy::collection::ptr collection, ifcopenshell::geom::conversion_results& r) { +bool ifcopenshell::geom::kernels::abstract_kernel::convert_impl(const taxonomy::collection::ptr collection, std::vector& r) { auto s = r.size(); for (auto& c : collection->children) { if (!convert(c, r) && !partial_success_is_success) { @@ -85,42 +85,42 @@ bool ifcopenshell::geom::kernels::abstract_kernel::convert_impl(const taxonomy:: return r.size() > s; } -bool ifcopenshell::geom::kernels::abstract_kernel::convert_impl(const taxonomy::function_item::ptr item, ifcopenshell::geom::conversion_results& cs) { +bool ifcopenshell::geom::kernels::abstract_kernel::convert_impl(const taxonomy::function_item::ptr item, std::vector& cs) { function_item_evaluator evaluator(settings(),item); auto expl = evaluator.evaluate(); expl->instance = item->instance; return convert(expl, cs); } -bool ifcopenshell::geom::kernels::abstract_kernel::convert_impl(const taxonomy::functor_item::ptr item, ifcopenshell::geom::conversion_results& cs) { +bool ifcopenshell::geom::kernels::abstract_kernel::convert_impl(const taxonomy::functor_item::ptr item, std::vector& cs) { function_item_evaluator evaluator(settings(), item); auto expl = evaluator.evaluate(); expl->instance = item->instance; return convert(expl, cs); } -bool ifcopenshell::geom::kernels::abstract_kernel::convert_impl(const taxonomy::piecewise_function::ptr item, ifcopenshell::geom::conversion_results& cs) { +bool ifcopenshell::geom::kernels::abstract_kernel::convert_impl(const taxonomy::piecewise_function::ptr item, std::vector& cs) { function_item_evaluator evaluator(settings(), item); auto expl = evaluator.evaluate(); expl->instance = item->instance; return convert(expl, cs); } -bool ifcopenshell::geom::kernels::abstract_kernel::convert_impl(const taxonomy::gradient_function::ptr item, ifcopenshell::geom::conversion_results& cs) { +bool ifcopenshell::geom::kernels::abstract_kernel::convert_impl(const taxonomy::gradient_function::ptr item, std::vector& cs) { function_item_evaluator evaluator(settings(), item); auto expl = evaluator.evaluate(); expl->instance = item->instance; return convert(expl, cs); } -bool ifcopenshell::geom::kernels::abstract_kernel::convert_impl(const taxonomy::cant_function::ptr item, ifcopenshell::geom::conversion_results& cs) { +bool ifcopenshell::geom::kernels::abstract_kernel::convert_impl(const taxonomy::cant_function::ptr item, std::vector& cs) { function_item_evaluator evaluator(settings(), item); auto expl = evaluator.evaluate(); expl->instance = item->instance; return convert(expl, cs); } -bool ifcopenshell::geom::kernels::abstract_kernel::convert_impl(const taxonomy::offset_function::ptr item, ifcopenshell::geom::conversion_results& cs) { +bool ifcopenshell::geom::kernels::abstract_kernel::convert_impl(const taxonomy::offset_function::ptr item, std::vector& cs) { function_item_evaluator evaluator(settings(), item); auto expl = evaluator.evaluate(); expl->instance = item->instance; diff --git a/src/ifcgeom/abstract_kernel.h b/src/ifcgeom/abstract_kernel.h index 2d2750af7a..db6c88122a 100644 --- a/src/ifcgeom/abstract_kernel.h +++ b/src/ifcgeom/abstract_kernel.h @@ -62,7 +62,7 @@ namespace ifcopenshell { class IFC_GEOM_API abstract_kernel { private: - std::unordered_map cache_; + std::unordered_map, ifcopenshell::geom::taxonomy::hash_functor, ifcopenshell::geom::taxonomy::equal_functor> cache_; protected: std::string geometry_library_; ifcopenshell::geom::settings settings_; @@ -78,7 +78,7 @@ namespace ifcopenshell { virtual ~abstract_kernel() = default; - virtual bool convert(const taxonomy::ptr, ifcopenshell::geom::conversion_results&); + virtual bool convert(const taxonomy::ptr, std::vector&); const ifcopenshell::geom::settings& settings() const; const std::string& geometry_library() const { return geometry_library_; @@ -93,49 +93,49 @@ namespace ifcopenshell { virtual bool supports_boolean_operations() const = 0; - virtual bool convert_impl(const taxonomy::matrix4::ptr, ifcopenshell::geom::conversion_results&) { throw not_implemented_error(); } - virtual bool convert_impl(const taxonomy::point3::ptr, ifcopenshell::geom::conversion_results&) { throw not_implemented_error(); } - virtual bool convert_impl(const taxonomy::direction3::ptr, ifcopenshell::geom::conversion_results&) { throw not_implemented_error(); } - virtual bool convert_impl(const taxonomy::line::ptr, ifcopenshell::geom::conversion_results&) { throw not_implemented_error(); } - virtual bool convert_impl(const taxonomy::circle::ptr, ifcopenshell::geom::conversion_results&) { throw not_implemented_error(); } - virtual bool convert_impl(const taxonomy::ellipse::ptr, ifcopenshell::geom::conversion_results&) { throw not_implemented_error(); } - virtual bool convert_impl(const taxonomy::bspline_curve::ptr, ifcopenshell::geom::conversion_results&) { throw not_implemented_error(); } - virtual bool convert_impl(const taxonomy::edge::ptr, ifcopenshell::geom::conversion_results&) { throw not_implemented_error(); } - virtual bool convert_impl(const taxonomy::loop::ptr, ifcopenshell::geom::conversion_results&) { throw not_implemented_error(); } - virtual bool convert_impl(const taxonomy::shell::ptr, ifcopenshell::geom::conversion_results&) { throw not_implemented_error(); } - virtual bool convert_impl(const taxonomy::face::ptr, ifcopenshell::geom::conversion_results&) { throw not_implemented_error(); } - virtual bool convert_impl(const taxonomy::extrusion::ptr, ifcopenshell::geom::conversion_results&) { throw not_implemented_error(); } - virtual bool convert_impl(const taxonomy::node::ptr, ifcopenshell::geom::conversion_results&) { throw not_implemented_error(); } - virtual bool convert_impl(const taxonomy::colour::ptr, ifcopenshell::geom::conversion_results&) { throw not_implemented_error(); } - virtual bool convert_impl(const taxonomy::boolean_result::ptr, ifcopenshell::geom::conversion_results&) { throw not_implemented_error(); } - virtual bool convert_impl(const taxonomy::plane::ptr, ifcopenshell::geom::conversion_results&) { throw not_implemented_error(); } - virtual bool convert_impl(const taxonomy::offset_curve::ptr, ifcopenshell::geom::conversion_results&) { throw not_implemented_error(); } - virtual bool convert_impl(const taxonomy::revolve::ptr, ifcopenshell::geom::conversion_results&) { throw not_implemented_error(); } - virtual bool convert_impl(const taxonomy::bspline_surface::ptr, ifcopenshell::geom::conversion_results&) { throw not_implemented_error(); } - virtual bool convert_impl(const taxonomy::cylinder::ptr, ifcopenshell::geom::conversion_results&) { throw not_implemented_error(); } - virtual bool convert_impl(const taxonomy::sphere::ptr, ifcopenshell::geom::conversion_results&) { throw not_implemented_error(); } - virtual bool convert_impl(const taxonomy::torus::ptr, ifcopenshell::geom::conversion_results&) { throw not_implemented_error(); } - virtual bool convert_impl(const taxonomy::solid::ptr, ifcopenshell::geom::conversion_results&) { throw not_implemented_error(); } - virtual bool convert_impl(const taxonomy::sweep_along_curve::ptr, ifcopenshell::geom::conversion_results&) { throw not_implemented_error(); } - virtual bool convert_impl(const taxonomy::loft::ptr, ifcopenshell::geom::conversion_results&) { throw not_implemented_error(); } - virtual bool convert_impl(const taxonomy::collection::ptr, ifcopenshell::geom::conversion_results&); - virtual bool convert_impl(const taxonomy::function_item::ptr item, ifcopenshell::geom::conversion_results& cs); - virtual bool convert_impl(const taxonomy::functor_item::ptr item, ifcopenshell::geom::conversion_results& cs); - virtual bool convert_impl(const taxonomy::piecewise_function::ptr item, ifcopenshell::geom::conversion_results& cs); - virtual bool convert_impl(const taxonomy::gradient_function::ptr item, ifcopenshell::geom::conversion_results& cs); - virtual bool convert_impl(const taxonomy::cant_function::ptr item, ifcopenshell::geom::conversion_results& cs); - virtual bool convert_impl(const taxonomy::offset_function::ptr item, ifcopenshell::geom::conversion_results& cs); + virtual bool convert_impl(const taxonomy::matrix4::ptr, std::vector&) { throw not_implemented_error(); } + virtual bool convert_impl(const taxonomy::point3::ptr, std::vector&) { throw not_implemented_error(); } + virtual bool convert_impl(const taxonomy::direction3::ptr, std::vector&) { throw not_implemented_error(); } + virtual bool convert_impl(const taxonomy::line::ptr, std::vector&) { throw not_implemented_error(); } + virtual bool convert_impl(const taxonomy::circle::ptr, std::vector&) { throw not_implemented_error(); } + virtual bool convert_impl(const taxonomy::ellipse::ptr, std::vector&) { throw not_implemented_error(); } + virtual bool convert_impl(const taxonomy::bspline_curve::ptr, std::vector&) { throw not_implemented_error(); } + virtual bool convert_impl(const taxonomy::edge::ptr, std::vector&) { throw not_implemented_error(); } + virtual bool convert_impl(const taxonomy::loop::ptr, std::vector&) { throw not_implemented_error(); } + virtual bool convert_impl(const taxonomy::shell::ptr, std::vector&) { throw not_implemented_error(); } + virtual bool convert_impl(const taxonomy::face::ptr, std::vector&) { throw not_implemented_error(); } + virtual bool convert_impl(const taxonomy::extrusion::ptr, std::vector&) { throw not_implemented_error(); } + virtual bool convert_impl(const taxonomy::node::ptr, std::vector&) { throw not_implemented_error(); } + virtual bool convert_impl(const taxonomy::colour::ptr, std::vector&) { throw not_implemented_error(); } + virtual bool convert_impl(const taxonomy::boolean_result::ptr, std::vector&) { throw not_implemented_error(); } + virtual bool convert_impl(const taxonomy::plane::ptr, std::vector&) { throw not_implemented_error(); } + virtual bool convert_impl(const taxonomy::offset_curve::ptr, std::vector&) { throw not_implemented_error(); } + virtual bool convert_impl(const taxonomy::revolve::ptr, std::vector&) { throw not_implemented_error(); } + virtual bool convert_impl(const taxonomy::bspline_surface::ptr, std::vector&) { throw not_implemented_error(); } + virtual bool convert_impl(const taxonomy::cylinder::ptr, std::vector&) { throw not_implemented_error(); } + virtual bool convert_impl(const taxonomy::sphere::ptr, std::vector&) { throw not_implemented_error(); } + virtual bool convert_impl(const taxonomy::torus::ptr, std::vector&) { throw not_implemented_error(); } + virtual bool convert_impl(const taxonomy::solid::ptr, std::vector&) { throw not_implemented_error(); } + virtual bool convert_impl(const taxonomy::sweep_along_curve::ptr, std::vector&) { throw not_implemented_error(); } + virtual bool convert_impl(const taxonomy::loft::ptr, std::vector&) { throw not_implemented_error(); } + virtual bool convert_impl(const taxonomy::collection::ptr, std::vector&); + virtual bool convert_impl(const taxonomy::function_item::ptr item, std::vector& cs); + virtual bool convert_impl(const taxonomy::functor_item::ptr item, std::vector& cs); + virtual bool convert_impl(const taxonomy::piecewise_function::ptr item, std::vector& cs); + virtual bool convert_impl(const taxonomy::gradient_function::ptr item, std::vector& cs); + virtual bool convert_impl(const taxonomy::cant_function::ptr item, std::vector& cs); + virtual bool convert_impl(const taxonomy::offset_function::ptr item, std::vector& cs); /* virtual void set_offset(const std::array &p_offset); virtual void set_rotation(const std::array &p_rotation); */ - virtual bool apply_layerset(ifcopenshell::geom::conversion_results&, const ifcopenshell::geom::layerset_information&) { throw not_implemented_error(); } - virtual bool apply_folded_layerset(ifcopenshell::geom::conversion_results&, const ifcopenshell::geom::layerset_information&, const std::map&) { throw not_implemented_error(); } + virtual bool apply_layerset(std::vector&, const ifcopenshell::geom::layerset_information&) { throw not_implemented_error(); } + virtual bool apply_folded_layerset(std::vector&, const ifcopenshell::geom::layerset_information&, const std::map&) { throw not_implemented_error(); } virtual bool convert_openings(const express::base& entity, const std::vector>& openings, - const ifcopenshell::geom::conversion_results& entity_shapes, const ifcopenshell::geom::taxonomy::matrix4& entity_trsf, ifcopenshell::geom::conversion_results& cut_shapes) = 0; - virtual bool unify_shapes(const ifcopenshell::geom::conversion_results&, ifcopenshell::geom::conversion_results&) { throw not_implemented_error(); } + const std::vector& entity_shapes, const ifcopenshell::geom::taxonomy::matrix4& entity_trsf, std::vector& cut_shapes) = 0; + virtual bool unify_shapes(const std::vector&, std::vector&) { throw not_implemented_error(); } virtual abstract_kernel* clone(ifcopenshell::logger& logger) const = 0; }; @@ -148,7 +148,7 @@ namespace { /* A compile-time for loop over the taxonomy kinds */ template struct dispatch_conversion { - static bool dispatch(ifcopenshell::geom::kernels::abstract_kernel* kernel, ifcopenshell::geom::taxonomy::kinds item_kind, const ifcopenshell::geom::taxonomy::ptr& item, ifcopenshell::geom::conversion_results& results) { + static bool dispatch(ifcopenshell::geom::kernels::abstract_kernel* kernel, ifcopenshell::geom::taxonomy::kinds item_kind, const ifcopenshell::geom::taxonomy::ptr& item, std::vector& results) { if (N == item_kind) { auto concrete_item = std::static_pointer_cast>(item); return kernel->convert_impl(concrete_item, results); @@ -160,7 +160,7 @@ namespace { template <> struct dispatch_conversion { - static bool dispatch(ifcopenshell::geom::kernels::abstract_kernel* kernel, ifcopenshell::geom::taxonomy::kinds, const ifcopenshell::geom::taxonomy::ptr& item, ifcopenshell::geom::conversion_results&) { + static bool dispatch(ifcopenshell::geom::kernels::abstract_kernel* kernel, ifcopenshell::geom::taxonomy::kinds, const ifcopenshell::geom::taxonomy::ptr& item, std::vector&) { if (kernel->partial_success_is_success) { std::string created_from; if (item->instance) { @@ -174,7 +174,7 @@ namespace { template struct dispatch_with_upgrade { - static bool dispatch(ifcopenshell::geom::kernels::abstract_kernel* kernel, const ifcopenshell::geom::taxonomy::ptr& item, ifcopenshell::geom::conversion_results& results) { + static bool dispatch(ifcopenshell::geom::kernels::abstract_kernel* kernel, const ifcopenshell::geom::taxonomy::ptr& item, std::vector& results) { auto concrete_item = ifcopenshell::geom::taxonomy::template dcast>(item); if (concrete_item) { return kernel->convert_impl(concrete_item, results); @@ -186,7 +186,7 @@ namespace { template <> struct dispatch_with_upgrade { - static bool dispatch(ifcopenshell::geom::kernels::abstract_kernel* kernel, const ifcopenshell::geom::taxonomy::ptr& item, ifcopenshell::geom::conversion_results&) { + static bool dispatch(ifcopenshell::geom::kernels::abstract_kernel* kernel, const ifcopenshell::geom::taxonomy::ptr& item, std::vector&) { if (kernel->partial_success_is_success) { std::string created_from; if (item->instance) { diff --git a/src/ifcgeom/conversion_result.h b/src/ifcgeom/conversion_result.h index 44f8832529..6cf1e62f98 100644 --- a/src/ifcgeom/conversion_result.h +++ b/src/ifcgeom/conversion_result.h @@ -598,12 +598,10 @@ namespace ifcopenshell::geom { } }; - typedef std::vector conversion_results; - #ifndef SWIG namespace util { // @todo this is now moved to occt kernel, do we need something similar in cgal? - // bool flatten_shape_list(const ifcopenshell::geom::conversion_results& shapes, TopoDS_Shape& result, bool fuse, double tol); + // bool flatten_shape_list(const std::vector& shapes, TopoDS_Shape& result, bool fuse, double tol); // Function to find boundary loops from triangles template diff --git a/src/ifcgeom/converter.cpp b/src/ifcgeom/converter.cpp index 86cc0b6272..a27af67597 100644 --- a/src/ifcgeom/converter.cpp +++ b/src/ifcgeom/converter.cpp @@ -18,7 +18,7 @@ ifcopenshell::geom::converter::~converter() { } namespace { - void substitute_with_box_based_on_density(ifcopenshell::logger& logger, ifcopenshell::geom::conversion_results& items, double& density) { + void substitute_with_box_based_on_density(ifcopenshell::logger& logger, std::vector& items, double& density) { int nv = 0; void* box = nullptr; double volume = 0.; @@ -45,7 +45,7 @@ ifcopenshell::geom::brep_element* ifcopenshell::geom::converter::create_brep_for representation_id_builder << representation_node->instance.id(); ifcopenshell::geom::Representation::brep* shape; - ifcopenshell::geom::conversion_results shapes; + std::vector shapes; if (!kernel_->convert(representation_node, shapes)) { return 0; @@ -191,7 +191,7 @@ ifcopenshell::geom::brep_element* ifcopenshell::geom::converter::create_brep_for representation_id_builder << "-" << op.id(); } - ifcopenshell::geom::conversion_results opened_shapes; + std::vector opened_shapes; bool caught_error = false; try { std::vector> opening_items; @@ -244,7 +244,7 @@ ifcopenshell::geom::brep_element* ifcopenshell::geom::converter::create_brep_for } if (settings_.get().get()) { - ifcopenshell::geom::conversion_results unified_shapes; + std::vector unified_shapes; try { if (kernel_->unify_shapes(shapes, unified_shapes)) { std::swap(shapes, unified_shapes); @@ -403,11 +403,11 @@ ifcopenshell::geom::brep_element* ifcopenshell::geom::converter::create_brep_for ); } -ifcopenshell::geom::conversion_results ifcopenshell::geom::converter::convert(express::base item) +std::vector ifcopenshell::geom::converter::convert(express::base item) { std::clock_t map_start = std::clock(); auto geom_item = mapping_->map(item); - ifcopenshell::geom::conversion_results results; + std::vector results; if (geom_item) { std::clock_t geom_start = std::clock(); if (!kernel_->convert(geom_item, results)) { diff --git a/src/ifcgeom/converter.h b/src/ifcgeom/converter.h index 3c0df1985a..1adbafbff7 100644 --- a/src/ifcgeom/converter.h +++ b/src/ifcgeom/converter.h @@ -46,7 +46,7 @@ namespace ifcopenshell { namespace geom { double total_map_time = 0.; double total_geom_time = 0.; - ifcopenshell::geom::conversion_results convert(express::base item); + std::vector convert(express::base item); ifcopenshell::geom::brep_element* create_brep_for_representation_and_product(const express::base representation, const express::base product); // ifcopenshell::geom::brep_element* create_brep_for_processed_representation(const express::base representation, const express::base product, ifcopenshell::geom::brep_element* brep); diff --git a/src/ifcgeom/hybrid_kernel.h b/src/ifcgeom/hybrid_kernel.h index b3e7f89d9b..a6c19d5058 100644 --- a/src/ifcgeom/hybrid_kernel.h +++ b/src/ifcgeom/hybrid_kernel.h @@ -48,7 +48,7 @@ namespace ifcopenshell { } return false; } - virtual bool convert(const taxonomy::ptr item, ifcopenshell::geom::conversion_results& rs) + virtual bool convert(const taxonomy::ptr item, std::vector& rs) { auto ops = mapping_->find_openings(item->instance); bool has_openings = ops.size(); @@ -77,7 +77,7 @@ namespace ifcopenshell { } return false; } - virtual bool apply_layerset(ifcopenshell::geom::conversion_results& items, const ifcopenshell::geom::layerset_information& layers) + virtual bool apply_layerset(std::vector& items, const ifcopenshell::geom::layerset_information& layers) { for (auto& k : kernels_) { bool success = false; @@ -90,7 +90,7 @@ namespace ifcopenshell { } return false; } - virtual bool apply_folded_layerset(ifcopenshell::geom::conversion_results& items, const ifcopenshell::geom::layerset_information& layers, const std::map& folds) + virtual bool apply_folded_layerset(std::vector& items, const ifcopenshell::geom::layerset_information& layers, const std::map& folds) { for (auto& k : kernels_) { bool success = false; @@ -104,7 +104,7 @@ namespace ifcopenshell { return false; } virtual bool convert_openings(const express::base& entity, const std::vector>& openings, - const ifcopenshell::geom::conversion_results& entity_shapes, const ifcopenshell::geom::taxonomy::matrix4& entity_trsf, ifcopenshell::geom::conversion_results& cut_shapes) + const std::vector& entity_shapes, const ifcopenshell::geom::taxonomy::matrix4& entity_trsf, std::vector& cut_shapes) { for (auto& k : kernels_) { bool is_valid = true; diff --git a/src/ifcgeom/kernels/cgal/cgal_kernel.cpp b/src/ifcgeom/kernels/cgal/cgal_kernel.cpp index b699641b1a..2cec518dcf 100644 --- a/src/ifcgeom/kernels/cgal/cgal_kernel.cpp +++ b/src/ifcgeom/kernels/cgal/cgal_kernel.cpp @@ -840,7 +840,7 @@ bool cgal_kernel::convert(const taxonomy::loop::ptr loop, cgal_wire& result) { } -bool cgal_kernel::convert_impl(const taxonomy::shell::ptr shell, conversion_results& results) { +bool cgal_kernel::convert_impl(const taxonomy::shell::ptr shell, std::vector& results) { cgal_polyhedron shape; if (!convert(shell, shape)) { return false; @@ -857,7 +857,7 @@ bool cgal_kernel::convert_impl(const taxonomy::shell::ptr shell, conversion_resu return true; } -bool cgal_kernel::convert_impl(const taxonomy::solid::ptr solid, conversion_results& results) { +bool cgal_kernel::convert_impl(const taxonomy::solid::ptr solid, std::vector& results) { if (solid->children.size() > 1) { logger().error("UNS", 5, "Multiple shells in solid not supported at the moment"); return false; @@ -897,7 +897,7 @@ namespace { } } -bool ifcopenshell::geom::kernels::cgal_kernel::convert_openings(const express::base& entity, const std::vector>& openings, const ifcopenshell::geom::conversion_results & entity_shapes, const ifcopenshell::geom::taxonomy::matrix4 & entity_trsf, ifcopenshell::geom::conversion_results & cut_shapes) +bool ifcopenshell::geom::kernels::cgal_kernel::convert_openings(const express::base& entity, const std::vector>& openings, const std::vector & entity_shapes, const ifcopenshell::geom::taxonomy::matrix4 & entity_trsf, std::vector & cut_shapes) { #ifdef IFOPSH_SIMPLE_KERNEL return false; @@ -939,7 +939,7 @@ bool ifcopenshell::geom::kernels::cgal_kernel::convert_openings(const express::b Eigen::Matrix4d relative = entity_trsf.ccomponents().inverse() * opening_trsf.ccomponents(); opening_trsf = relative; - conversion_results opening_shapes; + std::vector opening_shapes; abstract_kernel::convert(op.first, opening_shapes); for (unsigned int i = 0; i < opening_shapes.size(); ++i) { @@ -1018,7 +1018,7 @@ bool ifcopenshell::geom::kernels::cgal_kernel::convert_openings(const express::b } -bool cgal_kernel::convert_impl(const taxonomy::extrusion::ptr extrusion, conversion_results& results) { +bool cgal_kernel::convert_impl(const taxonomy::extrusion::ptr extrusion, std::vector& results) { cgal_polyhedron shape; if (!convert(extrusion, shape)) { return false; @@ -1845,7 +1845,7 @@ namespace { } } -bool cgal_kernel::convert_impl(const taxonomy::boolean_result::ptr br, conversion_results& results) { +bool cgal_kernel::convert_impl(const taxonomy::boolean_result::ptr br, std::vector& results) { double z0, z1; std::list> loops; @@ -1962,7 +1962,7 @@ bool cgal_kernel::convert_impl(const taxonomy::boolean_result::ptr br, conversio // abstract_kernel::convert(c, results); // continue; - conversion_results cr; + std::vector cr; operands.emplace_back(); operands.back().first = c->instance; diff --git a/src/ifcgeom/kernels/cgal/cgal_kernel.h b/src/ifcgeom/kernels/cgal/cgal_kernel.h index e8c2a98886..8eb15f23af 100644 --- a/src/ifcgeom/kernels/cgal/cgal_kernel.h +++ b/src/ifcgeom/kernels/cgal/cgal_kernel.h @@ -119,13 +119,13 @@ namespace ifcopenshell { bool process_as_2d_polygon(const taxonomy::boolean_result::ptr br, std::list>& loops, double& z0, double& z1); bool process_as_2d_polygon(const std::list>>& operands, std::list>& loops, double& z0, double& z1); - virtual bool convert_impl(const taxonomy::shell::ptr, ifcopenshell::geom::conversion_results&); - virtual bool convert_impl(const taxonomy::extrusion::ptr, ifcopenshell::geom::conversion_results&); - virtual bool convert_impl(const taxonomy::boolean_result::ptr, ifcopenshell::geom::conversion_results&); - virtual bool convert_impl(const taxonomy::solid::ptr, ifcopenshell::geom::conversion_results&); + virtual bool convert_impl(const taxonomy::shell::ptr, std::vector&); + virtual bool convert_impl(const taxonomy::extrusion::ptr, std::vector&); + virtual bool convert_impl(const taxonomy::boolean_result::ptr, std::vector&); + virtual bool convert_impl(const taxonomy::solid::ptr, std::vector&); virtual bool convert_openings(const express::base& entity, const std::vector>& openings, - const ifcopenshell::geom::conversion_results& entity_shapes, const ifcopenshell::geom::taxonomy::matrix4& entity_trsf, ifcopenshell::geom::conversion_results& cut_shapes); + const std::vector& entity_shapes, const ifcopenshell::geom::taxonomy::matrix4& entity_trsf, std::vector& cut_shapes); #ifndef IFOPSH_SIMPLE_KERNEL CGAL::Nef_polyhedron_3 precision_cube() const { return create_precision_cube_(); } diff --git a/src/ifcgeom/kernels/manifold/manifold_kernel.cpp b/src/ifcgeom/kernels/manifold/manifold_kernel.cpp index c80919d6bf..7dc26008f6 100644 --- a/src/ifcgeom/kernels/manifold/manifold_kernel.cpp +++ b/src/ifcgeom/kernels/manifold/manifold_kernel.cpp @@ -1406,7 +1406,7 @@ namespace { return result; } - taxonomy::style::ptr fallback_style(const taxonomy::geom_item::ptr& item, const ifcopenshell::geom::conversion_results& results) { + taxonomy::style::ptr fallback_style(const taxonomy::geom_item::ptr& item, const std::vector& results) { if (item->surface_style) { return item->surface_style; } @@ -1427,7 +1427,7 @@ namespace { return shape->as_manifold(); } - std::optional results_to_operand(const ifcopenshell::geom::conversion_results& results) { + std::optional results_to_operand(const std::vector& results) { std::vector operands; for (const auto& result : results) { auto operand = result_to_manifold(result); @@ -1444,7 +1444,7 @@ namespace { return manifold::Manifold::BatchBoolean(operands, manifold::OpType::Add); } - std::optional results_bbox(const ifcopenshell::geom::conversion_results& results) { + std::optional results_bbox(const std::vector& results) { bool any = false; manifold::Box bbox; for (const auto& result : results) { @@ -1489,7 +1489,7 @@ namespace { } } -bool manifold_kernel::convert_impl(const taxonomy::extrusion::ptr extrusion, ifcopenshell::geom::conversion_results& results) { +bool manifold_kernel::convert_impl(const taxonomy::extrusion::ptr extrusion, std::vector& results) { auto part = part_from_extrusion(extrusion, settings_.get().get(), dilation_hack, settings_.get().get()); if (!part) { ifcopenshell::logger::root().warning("Manifold kernel: failed to convert extrusion, requires planar bounds with line, circle or ellipse edges", extrusion->instance); @@ -1503,7 +1503,7 @@ bool manifold_kernel::convert_impl(const taxonomy::extrusion::ptr extrusion, ifc return true; } -bool manifold_kernel::convert_impl(const taxonomy::shell::ptr shell, ifcopenshell::geom::conversion_results& results) { +bool manifold_kernel::convert_impl(const taxonomy::shell::ptr shell, std::vector& results) { manifold::Manifold::Error status = manifold::Manifold::Error::NoError; auto part = part_from_shell(shell, settings_.get().get(), dilation_hack, &status); if (!part) { @@ -1521,7 +1521,7 @@ bool manifold_kernel::convert_impl(const taxonomy::shell::ptr shell, ifcopenshel return true; } -bool manifold_kernel::convert_impl(const taxonomy::solid::ptr solid, ifcopenshell::geom::conversion_results& results) { +bool manifold_kernel::convert_impl(const taxonomy::solid::ptr solid, std::vector& results) { std::vector shells; for (const auto& shell : solid->children) { const auto precision = settings_.get().get(); @@ -1556,7 +1556,7 @@ bool manifold_kernel::convert_impl(const taxonomy::solid::ptr solid, ifcopenshel return true; } -bool manifold_kernel::convert_impl(const taxonomy::boolean_result::ptr br, ifcopenshell::geom::conversion_results& results) { +bool manifold_kernel::convert_impl(const taxonomy::boolean_result::ptr br, std::vector& results) { std::vector operands; taxonomy::style::ptr style; std::optional first_bbox; @@ -1592,7 +1592,7 @@ bool manifold_kernel::convert_impl(const taxonomy::boolean_result::ptr br, ifcop style = child->surface_style; } } else { - ifcopenshell::geom::conversion_results converted; + std::vector converted; if (!abstract_kernel::convert(child, converted)) { ifcopenshell::logger::root().warning("Manifold kernel: failed to convert boolean operand", child->instance); return false; @@ -1634,7 +1634,7 @@ bool manifold_kernel::convert_impl(const taxonomy::boolean_result::ptr br, ifcop return true; } -bool manifold_kernel::convert_openings(const express::base&, const std::vector>& openings, const ifcopenshell::geom::conversion_results& entity_shapes, const taxonomy::matrix4& entity_trsf, ifcopenshell::geom::conversion_results& cut_shapes) { +bool manifold_kernel::convert_openings(const express::base&, const std::vector>& openings, const std::vector& entity_shapes, const taxonomy::matrix4& entity_trsf, std::vector& cut_shapes) { std::vector opening_operands; auto entity_bbox = results_bbox(entity_shapes); if (!entity_bbox) { @@ -1644,7 +1644,7 @@ bool manifold_kernel::convert_openings(const express::base&, const std::vector().get() * 10.; for (const auto& opening : openings) { const auto relative = taxonomy::make(entity_trsf.ccomponents().inverse() * opening.second.ccomponents()); - ifcopenshell::geom::conversion_results converted; + std::vector converted; if (!abstract_kernel::convert(opening.first, converted)) { ifcopenshell::logger::root().warning("Manifold kernel: failed to convert opening operand", opening.first->instance); return false; diff --git a/src/ifcgeom/kernels/manifold/manifold_kernel.h b/src/ifcgeom/kernels/manifold/manifold_kernel.h index 1e17e6870d..288f6e22e2 100644 --- a/src/ifcgeom/kernels/manifold/manifold_kernel.h +++ b/src/ifcgeom/kernels/manifold/manifold_kernel.h @@ -23,15 +23,15 @@ public: virtual bool supports_openings() const { return true; } virtual bool supports_boolean_operations() const { return true; } - virtual bool convert_impl(const taxonomy::extrusion::ptr, ifcopenshell::geom::conversion_results&); - virtual bool convert_impl(const taxonomy::shell::ptr, ifcopenshell::geom::conversion_results&); - virtual bool convert_impl(const taxonomy::solid::ptr, ifcopenshell::geom::conversion_results&); - virtual bool convert_impl(const taxonomy::boolean_result::ptr, ifcopenshell::geom::conversion_results&); + virtual bool convert_impl(const taxonomy::extrusion::ptr, std::vector&); + virtual bool convert_impl(const taxonomy::shell::ptr, std::vector&); + virtual bool convert_impl(const taxonomy::solid::ptr, std::vector&); + virtual bool convert_impl(const taxonomy::boolean_result::ptr, std::vector&); double dilation_hack = 0.; virtual bool convert_openings(const express::base& entity, const std::vector>& openings, - const ifcopenshell::geom::conversion_results& entity_shapes, const ifcopenshell::geom::taxonomy::matrix4& entity_trsf, ifcopenshell::geom::conversion_results& cut_shapes); + const std::vector& entity_shapes, const ifcopenshell::geom::taxonomy::matrix4& entity_trsf, std::vector& cut_shapes); }; } diff --git a/src/ifcgeom/kernels/opencascade/base_utils.cpp b/src/ifcgeom/kernels/opencascade/base_utils.cpp index f86415aa3e..37cebb268f 100644 --- a/src/ifcgeom/kernels/opencascade/base_utils.cpp +++ b/src/ifcgeom/kernels/opencascade/base_utils.cpp @@ -803,14 +803,14 @@ bool ifcopenshell::geom::util::create_solid_from_faces(const NCollection_List& shapes, TopoDS_Shape& result, bool fuse, bool create_shell, double tol) { TopoDS_Compound compound; BRep_Builder builder; builder.MakeCompound(compound); result = TopoDS_Shape(); - for (ifcopenshell::geom::conversion_results::const_iterator it = shapes.begin(); it != shapes.end(); ++it) { + for (std::vector::const_iterator it = shapes.begin(); it != shapes.end(); ++it) { TopoDS_Shape merged; const TopoDS_Shape& s = std::static_pointer_cast(it->Shape())->shape(); if (fuse || create_shell) { diff --git a/src/ifcgeom/kernels/opencascade/base_utils.h b/src/ifcgeom/kernels/opencascade/base_utils.h index 47a8fa9732..b56d6af454 100644 --- a/src/ifcgeom/kernels/opencascade/base_utils.h +++ b/src/ifcgeom/kernels/opencascade/base_utils.h @@ -78,7 +78,7 @@ namespace ifcopenshell::geom { IFC_GEOMLIBRARY_API TopoDS_Shape apply_transformation(const TopoDS_Shape&, const gp_Trsf&); IFC_GEOMLIBRARY_API TopoDS_Shape apply_transformation(const TopoDS_Shape&, const gp_GTrsf&); - IFC_GEOMLIBRARY_API bool flatten_shape_list(const ifcopenshell::geom::conversion_results& shapes, TopoDS_Shape& result, bool fuse, bool create_shell, double tol); + IFC_GEOMLIBRARY_API bool flatten_shape_list(const std::vector& shapes, TopoDS_Shape& result, bool fuse, bool create_shell, double tol); IFC_GEOMLIBRARY_API bool validate_shape(const TopoDS_Shape&); IFC_GEOMLIBRARY_API TopoDS_Shape unify(const TopoDS_Shape& s, double tolerance); diff --git a/src/ifcgeom/kernels/opencascade/boolean_result.cpp b/src/ifcgeom/kernels/opencascade/boolean_result.cpp index 1abc6b6fa9..014fdbd859 100644 --- a/src/ifcgeom/kernels/opencascade/boolean_result.cpp +++ b/src/ifcgeom/kernels/opencascade/boolean_result.cpp @@ -82,7 +82,7 @@ namespace { } } -bool open_cascade_kernel::convert_impl(const taxonomy::boolean_result::ptr br, conversion_results& results) { +bool open_cascade_kernel::convert_impl(const taxonomy::boolean_result::ptr br, std::vector& results) { return handle_occt_exception([&]() -> bool { bool valid_result = false; bool first = true; @@ -94,7 +94,7 @@ bool open_cascade_kernel::convert_impl(const taxonomy::boolean_result::ptr br, c taxonomy::style::ptr first_item_style; for (auto& c : br->children) { - ifcopenshell::geom::conversion_results cr; + std::vector cr; abstract_kernel::convert(c, cr); if (first && br->operation == taxonomy::boolean_result::SUBTRACTION) { // @todo A will be null on union/intersection, intended? diff --git a/src/ifcgeom/kernels/opencascade/extrusion.cpp b/src/ifcgeom/kernels/opencascade/extrusion.cpp index 1978b9b8f1..416a147b7e 100644 --- a/src/ifcgeom/kernels/opencascade/extrusion.cpp +++ b/src/ifcgeom/kernels/opencascade/extrusion.cpp @@ -70,7 +70,7 @@ bool open_cascade_kernel::convert(const taxonomy::extrusion::ptr extrusion, Topo return !shape.IsNull(); } -bool open_cascade_kernel::convert_impl(const taxonomy::extrusion::ptr extrusion, ifcopenshell::geom::conversion_results& results) { +bool open_cascade_kernel::convert_impl(const taxonomy::extrusion::ptr extrusion, std::vector& results) { return handle_occt_exception([&]() -> bool { TopoDS_Shape shape; diff --git a/src/ifcgeom/kernels/opencascade/face.cpp b/src/ifcgeom/kernels/opencascade/face.cpp index 61afbaf4cd..89fb8438e2 100644 --- a/src/ifcgeom/kernels/opencascade/face.cpp +++ b/src/ifcgeom/kernels/opencascade/face.cpp @@ -624,7 +624,7 @@ bool open_cascade_kernel::convert(const taxonomy::face::ptr face, TopoDS_Shape& return true; } -bool open_cascade_kernel::convert_impl(const taxonomy::face::ptr face, ifcopenshell::geom::conversion_results& results) { +bool open_cascade_kernel::convert_impl(const taxonomy::face::ptr face, std::vector& results) { return handle_occt_exception([&]() -> bool { TopoDS_Shape shape; diff --git a/src/ifcgeom/kernels/opencascade/layerset.cpp b/src/ifcgeom/kernels/opencascade/layerset.cpp index 98ab95008d..b4ba9fe6a8 100644 --- a/src/ifcgeom/kernels/opencascade/layerset.cpp +++ b/src/ifcgeom/kernels/opencascade/layerset.cpp @@ -167,7 +167,7 @@ namespace { } -bool ifcopenshell::geom::util::apply_folded_layerset(const conversion_results& items, const std::vector< std::vector>>& surfaces, const std::vector& styles, conversion_results& result, double tol) { +bool ifcopenshell::geom::util::apply_folded_layerset(const std::vector& items, const std::vector< std::vector>>& surfaces, const std::vector& styles, std::vector& result, double tol) { Bnd_Box bb; TopoDS_Shape input; flatten_shape_list(items, input, false, false, tol); @@ -249,7 +249,7 @@ bool ifcopenshell::geom::util::apply_folded_layerset(const conversion_results& i } else if (shells.Extent() == 1) { - for (conversion_results::const_iterator it = items.begin(); it != items.end(); ++it) { + for (std::vector::const_iterator it = items.begin(); it != items.end(); ++it) { TopoDS_Shape a, b; if (split_solid_by_shell(std::static_pointer_cast(it->Shape())->shape(), shells.First(), a, b, tol)) { result.push_back(conversion_result(it->ItemId(), it->Placement(), new open_cascade_shape(b), (!!styles[0] ? styles[0] : it->StylePtr()))); @@ -263,7 +263,7 @@ bool ifcopenshell::geom::util::apply_folded_layerset(const conversion_results& i } else { - for (conversion_results::const_iterator it = items.begin(); it != items.end(); ++it) { + for (std::vector::const_iterator it = items.begin(); it != items.end(); ++it) { const TopoDS_Shape& s = std::static_pointer_cast(it->Shape())->shape(); TopoDS_Shape sld = ensure_fit_for_subtraction(s, tol); @@ -284,14 +284,14 @@ bool ifcopenshell::geom::util::apply_folded_layerset(const conversion_results& i } -bool ifcopenshell::geom::util::apply_layerset(const conversion_results& items, const std::vector>& surfaces, const std::vector& styles, conversion_results& result, double tol) { +bool ifcopenshell::geom::util::apply_layerset(const std::vector& items, const std::vector>& surfaces, const std::vector& styles, std::vector& result, double tol) { if (surfaces.size() < 3) { return false; } else if (surfaces.size() == 3) { - for (conversion_results::const_iterator it = items.begin(); it != items.end(); ++it) { + for (std::vector::const_iterator it = items.begin(); it != items.end(); ++it) { TopoDS_Shape a, b; if (split_solid_by_surface(std::static_pointer_cast(it->Shape())->shape(), surfaces[1], a, b, tol)) { result.push_back(conversion_result(it->ItemId(), it->Placement(),new open_cascade_shape(b), (!!styles[0] ? styles[0] : it->StylePtr()))); @@ -309,7 +309,7 @@ bool ifcopenshell::geom::util::apply_layerset(const conversion_results& items, c // Determine whether sequence of surfaces is consistent with surface normal, so that // layer operations are applied in the correct order. This seems to be always the case. Bnd_Box bb; - for (conversion_results::const_iterator it = items.begin(); it != items.end(); ++it) { + for (std::vector::const_iterator it = items.begin(); it != items.end(); ++it) { BRepBndLib::Add(it->Shape(), bb); } @@ -334,7 +334,7 @@ bool ifcopenshell::geom::util::apply_layerset(const conversion_results& items, c mass.ChangeCoord() += n1.XYZ(); */ - for (conversion_results::const_iterator it = items.begin(); it != items.end(); ++it) { + for (std::vector::const_iterator it = items.begin(); it != items.end(); ++it) { const TopoDS_Shape& s = std::static_pointer_cast(it->Shape())->shape(); TopoDS_Shape sld = ensure_fit_for_subtraction(s, tol); diff --git a/src/ifcgeom/kernels/opencascade/layerset.h b/src/ifcgeom/kernels/opencascade/layerset.h index cd4af8439a..a09443ee53 100644 --- a/src/ifcgeom/kernels/opencascade/layerset.h +++ b/src/ifcgeom/kernels/opencascade/layerset.h @@ -11,9 +11,9 @@ namespace ifcopenshell::geom { namespace util { - bool apply_layerset(const conversion_results&, const std::vector>&, const std::vector&, conversion_results&, double tol); + bool apply_layerset(const std::vector&, const std::vector>&, const std::vector&, std::vector&, double tol); - bool apply_folded_layerset(const conversion_results&, const std::vector>>&, const std::vector&, conversion_results&, double tol); + bool apply_folded_layerset(const std::vector&, const std::vector>>&, const std::vector&, std::vector&, double tol); bool split_solid_by_surface(const TopoDS_Shape&, const opencascade::handle&, TopoDS_Shape&, TopoDS_Shape&, double tol); diff --git a/src/ifcgeom/kernels/opencascade/loft.cpp b/src/ifcgeom/kernels/opencascade/loft.cpp index 9c41023fda..e69755088b 100644 --- a/src/ifcgeom/kernels/opencascade/loft.cpp +++ b/src/ifcgeom/kernels/opencascade/loft.cpp @@ -452,7 +452,7 @@ bool open_cascade_kernel::convert(const taxonomy::loft::ptr loft, TopoDS_Shape& return true; } -bool open_cascade_kernel::convert_impl(const taxonomy::loft::ptr loft, ifcopenshell::geom::conversion_results& results) { +bool open_cascade_kernel::convert_impl(const taxonomy::loft::ptr loft, std::vector& results) { TopoDS_Shape shape; if (!convert(loft, shape)) { return false; diff --git a/src/ifcgeom/kernels/opencascade/loop.cpp b/src/ifcgeom/kernels/opencascade/loop.cpp index e1b8ca93ad..f89a9d93cc 100644 --- a/src/ifcgeom/kernels/opencascade/loop.cpp +++ b/src/ifcgeom/kernels/opencascade/loop.cpp @@ -394,7 +394,7 @@ bool open_cascade_kernel::convert(const taxonomy::loop::ptr loop, TopoDS_Wire& w return true; } -bool open_cascade_kernel::convert_impl(const taxonomy::loop::ptr loop, ifcopenshell::geom::conversion_results& results) { +bool open_cascade_kernel::convert_impl(const taxonomy::loop::ptr loop, std::vector& results) { TopoDS_Wire shape; if (!convert(loop, shape)) { return false; @@ -408,7 +408,7 @@ bool open_cascade_kernel::convert_impl(const taxonomy::loop::ptr loop, ifcopensh return true; } -bool open_cascade_kernel::convert_impl(const taxonomy::edge::ptr edge, ifcopenshell::geom::conversion_results& results) { +bool open_cascade_kernel::convert_impl(const taxonomy::edge::ptr edge, std::vector& results) { TopoDS_Wire shape = std::get(convert_curve(edge)); results.emplace_back(conversion_result( diff --git a/src/ifcgeom/kernels/opencascade/opencascade_kernel.cpp b/src/ifcgeom/kernels/opencascade/opencascade_kernel.cpp index ecd189b6f9..517eae631d 100644 --- a/src/ifcgeom/kernels/opencascade/opencascade_kernel.cpp +++ b/src/ifcgeom/kernels/opencascade/opencascade_kernel.cpp @@ -44,7 +44,7 @@ namespace { using namespace ifcopenshell::geom; bool ifcopenshell::geom::open_cascade_kernel::convert_openings(const express::base& entity, const std::vector>& openings, - const ifcopenshell::geom::conversion_results& entity_shapes, const ifcopenshell::geom::taxonomy::matrix4& entity_trsf, ifcopenshell::geom::conversion_results& cut_shapes) { + const std::vector& entity_shapes, const ifcopenshell::geom::taxonomy::matrix4& entity_trsf, std::vector& cut_shapes) { util::boolean_settings bst; bst.attempt_2d = settings_.get().get(); @@ -83,7 +83,7 @@ bool ifcopenshell::geom::open_cascade_kernel::convert_openings(const express::ba Eigen::Matrix4d relative = entity_trsf.ccomponents().inverse() * opening_trsf.ccomponents(); // opening_trsf = relative; - ifcopenshell::geom::conversion_results opening_shapes; + std::vector opening_shapes; // @todo abstract_kernel::convert(op.first, opening_shapes); @@ -110,7 +110,7 @@ bool ifcopenshell::geom::open_cascade_kernel::convert_openings(const express::ba std::sort(opening_vector.begin(), opening_vector.end(), opening_sorter()); // Iterate over the shapes of the IfcProduct - for (ifcopenshell::geom::conversion_results::const_iterator it3 = entity_shapes.begin(); it3 != entity_shapes.end(); ++it3) { + for (std::vector::const_iterator it3 = entity_shapes.begin(); it3 != entity_shapes.end(); ++it3) { TopoDS_Compound C; BRep_Builder B; @@ -267,7 +267,7 @@ bool ifcopenshell::geom::open_cascade_kernel::convert_openings(const express::ba return true; } -bool ifcopenshell::geom::open_cascade_kernel::unify_shapes(const ifcopenshell::geom::conversion_results& input, ifcopenshell::geom::conversion_results& output) { +bool ifcopenshell::geom::open_cascade_kernel::unify_shapes(const std::vector& input, std::vector& output) { std::transform(input.begin(), input.end(), std::back_inserter(output), [this](auto v) { auto& s = std::static_pointer_cast(v.Shape())->shape(); return ifcopenshell::geom::conversion_result( @@ -279,7 +279,7 @@ bool ifcopenshell::geom::open_cascade_kernel::unify_shapes(const ifcopenshell::g return true; } -bool ifcopenshell::geom::open_cascade_kernel::convert_impl(const taxonomy::revolve::ptr r, ifcopenshell::geom::conversion_results& results) { +bool ifcopenshell::geom::open_cascade_kernel::convert_impl(const taxonomy::revolve::ptr r, std::vector& results) { gp_Ax1 ax( @@ -375,7 +375,7 @@ bool ifcopenshell::geom::open_cascade_kernel::convert_impl(const taxonomy::revol // representation_id_builder << representation->data().id(); // // ifcopenshell::geom::Representation::brep* shape; -// ifcopenshell::geom::conversion_results shapes, shapes2; +// std::vector shapes, shapes2; // // if (!convert_shapes(representation, shapes)) { // return 0; @@ -430,7 +430,7 @@ bool ifcopenshell::geom::open_cascade_kernel::convert_impl(const taxonomy::revol // const IfcSchema::IfcMaterial* single_material = get_single_material_association(product); // if (single_material) { // auto s = get_style(single_material); -// for (ifcopenshell::geom::conversion_results::iterator it = shapes.begin(); it != shapes.end(); ++it) { +// for (std::vector::iterator it = shapes.begin(); it != shapes.end(); ++it) { // if (!it->hasStyle() && s) { // it->setStyle(s); // material_style_applied = true; @@ -438,7 +438,7 @@ bool ifcopenshell::geom::open_cascade_kernel::convert_impl(const taxonomy::revol // } // } else { // bool some_items_without_style = false; -// for (ifcopenshell::geom::conversion_results::iterator it = shapes.begin(); it != shapes.end(); ++it) { +// for (std::vector::iterator it = shapes.begin(); it != shapes.end(); ++it) { // if (!it->hasStyle() && util::count(it->Shape(), TopAbs_FACE)) { // some_items_without_style = true; // break; @@ -502,7 +502,7 @@ bool ifcopenshell::geom::open_cascade_kernel::convert_impl(const taxonomy::revol // representation_id_builder << "-" << (*it)->data().id(); // } // -// ifcopenshell::geom::conversion_results opened_shapes; +// std::vector opened_shapes; // bool caught_error = false; // try { // convert_openings(product, openings, shapes, trsf, opened_shapes); @@ -518,7 +518,7 @@ bool ifcopenshell::geom::open_cascade_kernel::convert_impl(const taxonomy::revol // } // // if (settings.get(IteratorSettings::USE_WORLD_COORDS)) { -// for (ifcopenshell::geom::conversion_results::iterator it = opened_shapes.begin(); it != opened_shapes.end(); ++it) { +// for (std::vector::iterator it = opened_shapes.begin(); it != opened_shapes.end(); ++it) { // it->prepend(trsf); // } // trsf = gp_Trsf(); @@ -526,7 +526,7 @@ bool ifcopenshell::geom::open_cascade_kernel::convert_impl(const taxonomy::revol // } // shape = new ifcopenshell::geom::Representation::brep(element_settings, representation_id_builder.str(), opened_shapes); // } else if (settings.get(IteratorSettings::USE_WORLD_COORDS)) { -// for (ifcopenshell::geom::conversion_results::iterator it = shapes.begin(); it != shapes.end(); ++it) { +// for (std::vector::iterator it = shapes.begin(); it != shapes.end(); ++it) { // it->prepend(trsf); // } // trsf = gp_Trsf(); @@ -770,7 +770,7 @@ bool ifcopenshell::geom::open_cascade_kernel::convert_impl(const taxonomy::revol // return false; // } // -// conversion_results items; +// std::vector items; // { // Kernel temp = *this; // temp.setValue(GV_DIMENSIONALITY, -1.); @@ -778,7 +778,7 @@ bool ifcopenshell::geom::open_cascade_kernel::convert_impl(const taxonomy::revol // } // // TopoDS_Vertex a, b; -// for (conversion_results::const_iterator it = items.begin(); it != items.end(); ++it) { +// for (std::vector::const_iterator it = items.begin(); it != items.end(); ++it) { // TopExp_Explorer exp(it->Shape(), TopAbs_VERTEX); // for (; exp.More(); exp.Next()) { // b = TopoDS::Vertex(exp.Current()); @@ -798,7 +798,7 @@ bool ifcopenshell::geom::open_cascade_kernel::convert_impl(const taxonomy::revol // return true; // } // -// bool ifcopenshell::geom::Kernel::fold_layers(const IfcSchema::IfcWall* wall, const conversion_results& items, const std::vector& surfaces, const std::vector& thicknesses, std::vector< std::vector >& result) { +// bool ifcopenshell::geom::Kernel::fold_layers(const IfcSchema::IfcWall* wall, const std::vector& items, const std::vector& surfaces, const std::vector& thicknesses, std::vector< std::vector >& result) { // /* // * @todo isn't it easier to do this based on the non-folded surfaces of // * the connected walls and fold both pairs of layersets simultaneously? @@ -969,7 +969,7 @@ bool ifcopenshell::geom::open_cascade_kernel::convert_impl(const taxonomy::revol // continue; // } // -// conversion_results axis_items; +// std::vector axis_items; // { // Kernel temp = *this; // temp.setValue(GV_DIMENSIONALITY, -1.); @@ -1377,7 +1377,7 @@ bool ifcopenshell::geom::open_cascade_kernel::convert_impl(const taxonomy::revol // return style_cache[material->data().id()] = material_style; // } // -// void ifcopenshell::geom::Kernel::apply_layerset(ifcopenshell::geom::conversion_results& r, const ifcopenshell::geom::layerset_information& info) { +// void ifcopenshell::geom::Kernel::apply_layerset(std::vector& r, const ifcopenshell::geom::layerset_information& info) { // convert(info.layers); // // if (info.layers.empty()) { @@ -1398,8 +1398,8 @@ bool ifcopenshell::geom::open_cascade_kernel::convert_impl(const taxonomy::revol // return false; // } // -// ifcopenshell::geom::conversion_results r2; -// if (ifcopenshell::geom::util::apply_layerset(r, const std::vector&, conversion_results& r2, double tol)) { +// std::vector r2; +// if (ifcopenshell::geom::util::apply_layerset(r, const std::vector&, std::vector& r2, double tol)) { // std::swap(r, r2) // } // } diff --git a/src/ifcgeom/kernels/opencascade/opencascade_kernel.h b/src/ifcgeom/kernels/opencascade/opencascade_kernel.h index feb9bf69b1..623246c243 100644 --- a/src/ifcgeom/kernels/opencascade/opencascade_kernel.h +++ b/src/ifcgeom/kernels/opencascade/opencascade_kernel.h @@ -132,20 +132,20 @@ public: bool convert(const ifcopenshell::geom::taxonomy::bspline_surface::ptr bs, Handle(Geom_Surface) surf); bool convert(const ifcopenshell::geom::taxonomy::sweep_along_curve::ptr, TopoDS_Shape&); - virtual bool convert_impl(const ifcopenshell::geom::taxonomy::edge::ptr, ifcopenshell::geom::conversion_results&); - virtual bool convert_impl(const ifcopenshell::geom::taxonomy::loop::ptr, ifcopenshell::geom::conversion_results&); - virtual bool convert_impl(const ifcopenshell::geom::taxonomy::face::ptr, ifcopenshell::geom::conversion_results&); - virtual bool convert_impl(const ifcopenshell::geom::taxonomy::solid::ptr, ifcopenshell::geom::conversion_results&); - virtual bool convert_impl(const ifcopenshell::geom::taxonomy::shell::ptr, ifcopenshell::geom::conversion_results&); - virtual bool convert_impl(const ifcopenshell::geom::taxonomy::extrusion::ptr, ifcopenshell::geom::conversion_results&); - virtual bool convert_impl(const ifcopenshell::geom::taxonomy::revolve::ptr, ifcopenshell::geom::conversion_results&); - virtual bool convert_impl(const ifcopenshell::geom::taxonomy::boolean_result::ptr, ifcopenshell::geom::conversion_results&); - virtual bool convert_impl(const ifcopenshell::geom::taxonomy::loft::ptr, ifcopenshell::geom::conversion_results&); - virtual bool convert_impl(const ifcopenshell::geom::taxonomy::sweep_along_curve::ptr, ifcopenshell::geom::conversion_results&); + virtual bool convert_impl(const ifcopenshell::geom::taxonomy::edge::ptr, std::vector&); + virtual bool convert_impl(const ifcopenshell::geom::taxonomy::loop::ptr, std::vector&); + virtual bool convert_impl(const ifcopenshell::geom::taxonomy::face::ptr, std::vector&); + virtual bool convert_impl(const ifcopenshell::geom::taxonomy::solid::ptr, std::vector&); + virtual bool convert_impl(const ifcopenshell::geom::taxonomy::shell::ptr, std::vector&); + virtual bool convert_impl(const ifcopenshell::geom::taxonomy::extrusion::ptr, std::vector&); + virtual bool convert_impl(const ifcopenshell::geom::taxonomy::revolve::ptr, std::vector&); + virtual bool convert_impl(const ifcopenshell::geom::taxonomy::boolean_result::ptr, std::vector&); + virtual bool convert_impl(const ifcopenshell::geom::taxonomy::loft::ptr, std::vector&); + virtual bool convert_impl(const ifcopenshell::geom::taxonomy::sweep_along_curve::ptr, std::vector&); virtual bool convert_openings(const express::base& entity, const std::vector>& openings, - const ifcopenshell::geom::conversion_results& entity_shapes, const ifcopenshell::geom::taxonomy::matrix4& entity_trsf, ifcopenshell::geom::conversion_results& cut_shapes); - virtual bool unify_shapes(const ifcopenshell::geom::conversion_results& input, ifcopenshell::geom::conversion_results& output); + const std::vector& entity_shapes, const ifcopenshell::geom::taxonomy::matrix4& entity_trsf, std::vector& cut_shapes); + virtual bool unify_shapes(const std::vector& input, std::vector& output); typedef std::variant curve_creation_visitor_result_type; curve_creation_visitor_result_type convert_curve(const ifcopenshell::geom::taxonomy::ptr); diff --git a/src/ifcgeom/kernels/opencascade/shell.cpp b/src/ifcgeom/kernels/opencascade/shell.cpp index 525cc8b4e4..3eef864a84 100644 --- a/src/ifcgeom/kernels/opencascade/shell.cpp +++ b/src/ifcgeom/kernels/opencascade/shell.cpp @@ -105,7 +105,7 @@ bool open_cascade_kernel::convert(const taxonomy::shell::ptr l, TopoDS_Shape& sh return true; } -bool open_cascade_kernel::convert_impl(const taxonomy::shell::ptr shell, ifcopenshell::geom::conversion_results& results) { +bool open_cascade_kernel::convert_impl(const taxonomy::shell::ptr shell, std::vector& results) { return handle_occt_exception([&]() -> bool { TopoDS_Shape shape; diff --git a/src/ifcgeom/kernels/opencascade/solid.cpp b/src/ifcgeom/kernels/opencascade/solid.cpp index e51fd98acd..ff93693c63 100644 --- a/src/ifcgeom/kernels/opencascade/solid.cpp +++ b/src/ifcgeom/kernels/opencascade/solid.cpp @@ -100,7 +100,7 @@ bool open_cascade_kernel::convert(const taxonomy::solid::ptr solid, TopoDS_Shape return !result.IsNull(); } -bool open_cascade_kernel::convert_impl(const taxonomy::solid::ptr solid, ifcopenshell::geom::conversion_results& results) { +bool open_cascade_kernel::convert_impl(const taxonomy::solid::ptr solid, std::vector& results) { return handle_occt_exception([&]() -> bool { TopoDS_Shape shape; diff --git a/src/ifcgeom/kernels/opencascade/sweep_along_curve.cpp b/src/ifcgeom/kernels/opencascade/sweep_along_curve.cpp index 359abe1488..730823955a 100644 --- a/src/ifcgeom/kernels/opencascade/sweep_along_curve.cpp +++ b/src/ifcgeom/kernels/opencascade/sweep_along_curve.cpp @@ -315,7 +315,7 @@ bool open_cascade_kernel::convert(const taxonomy::sweep_along_curve::ptr scs, To return true; } -bool open_cascade_kernel::convert_impl(const taxonomy::sweep_along_curve::ptr scs, ifcopenshell::geom::conversion_results& results) { +bool open_cascade_kernel::convert_impl(const taxonomy::sweep_along_curve::ptr scs, std::vector& results) { return handle_occt_exception([&]() -> bool { TopoDS_Shape shape; diff --git a/src/ifcgeom/kernels/passthrough/passthrough_kernel.cpp b/src/ifcgeom/kernels/passthrough/passthrough_kernel.cpp index e5a18bf1cd..b7cd7f6199 100644 --- a/src/ifcgeom/kernels/passthrough/passthrough_kernel.cpp +++ b/src/ifcgeom/kernels/passthrough/passthrough_kernel.cpp @@ -252,7 +252,7 @@ namespace { } } -bool passthrough_kernel::convert_impl(const taxonomy::shell::ptr shell, ifcopenshell::geom::conversion_results& results) { +bool passthrough_kernel::convert_impl(const taxonomy::shell::ptr shell, std::vector& results) { if (!shell_supported(shell)) { return false; } @@ -264,7 +264,7 @@ bool passthrough_kernel::convert_impl(const taxonomy::shell::ptr shell, ifcopens return true; } -bool passthrough_kernel::convert_impl(const taxonomy::solid::ptr solid, ifcopenshell::geom::conversion_results& results) { +bool passthrough_kernel::convert_impl(const taxonomy::solid::ptr solid, std::vector& results) { if (!solid || solid->children.size() != 1) { return false; } @@ -284,7 +284,7 @@ bool passthrough_kernel::convert_impl(const taxonomy::solid::ptr solid, ifcopens return true; } -bool passthrough_kernel::convert_impl(const taxonomy::extrusion::ptr extrusion, ifcopenshell::geom::conversion_results& results) { +bool passthrough_kernel::convert_impl(const taxonomy::extrusion::ptr extrusion, std::vector& results) { auto shell = shell_from_extrusion(extrusion, settings_.get().get()); if (!shell) { return false; @@ -298,6 +298,6 @@ bool passthrough_kernel::convert_impl(const taxonomy::extrusion::ptr extrusion, } bool passthrough_kernel::convert_openings(const express::base&, const std::vector>&, - const ifcopenshell::geom::conversion_results&, const ifcopenshell::geom::taxonomy::matrix4&, ifcopenshell::geom::conversion_results&) { + const std::vector&, const ifcopenshell::geom::taxonomy::matrix4&, std::vector&) { return false; } diff --git a/src/ifcgeom/kernels/passthrough/passthrough_kernel.h b/src/ifcgeom/kernels/passthrough/passthrough_kernel.h index df0a3bb3b4..bb9bbc553f 100644 --- a/src/ifcgeom/kernels/passthrough/passthrough_kernel.h +++ b/src/ifcgeom/kernels/passthrough/passthrough_kernel.h @@ -20,12 +20,12 @@ public: virtual bool supports_boolean_operations() const { return false; } - virtual bool convert_impl(const taxonomy::shell::ptr, ifcopenshell::geom::conversion_results&); - virtual bool convert_impl(const taxonomy::solid::ptr, ifcopenshell::geom::conversion_results&); - virtual bool convert_impl(const taxonomy::extrusion::ptr, ifcopenshell::geom::conversion_results&); + virtual bool convert_impl(const taxonomy::shell::ptr, std::vector&); + virtual bool convert_impl(const taxonomy::solid::ptr, std::vector&); + virtual bool convert_impl(const taxonomy::extrusion::ptr, std::vector&); virtual bool convert_openings(const express::base&, const std::vector>&, - const ifcopenshell::geom::conversion_results&, const ifcopenshell::geom::taxonomy::matrix4&, ifcopenshell::geom::conversion_results&); + const std::vector&, const ifcopenshell::geom::taxonomy::matrix4&, std::vector&); }; } diff --git a/src/ifcgeom/representation.cpp b/src/ifcgeom/representation.cpp index d6a6b4ef31..bb3689ee60 100644 --- a/src/ifcgeom/representation.cpp +++ b/src/ifcgeom/representation.cpp @@ -98,7 +98,7 @@ bool ifcopenshell::geom::Representation::brep::calculate_volume(double& volume) bool ifcopenshell::geom::Representation::brep::calculate_projected_surface_area(const ifcopenshell::geom::taxonomy::matrix4::ptr& place, double& along_x, double& along_y, double& along_z) const { along_x = along_y = along_z = 0.; - for (ifcopenshell::geom::conversion_results::const_iterator it = begin(); it != end(); ++it) { + for (std::vector::const_iterator it = begin(); it != end(); ++it) { double x, y, z; it->Shape()->surface_area_along_direction(settings().get().get(), place, x, y, z); @@ -120,7 +120,7 @@ ifcopenshell::geom::Representation::triangulation::triangulation(const brep& sha : representation(shape_model.settings(), shape_model.entity(), shape_model.id()) , weld_offset_(0) { - for (ifcopenshell::geom::conversion_results::const_iterator iit = shape_model.begin(); iit != shape_model.end(); ++iit) { + for (std::vector::const_iterator iit = shape_model.begin(); iit != shape_model.end(); ++iit) { // Don't weld vertices that belong to different items to prevent non-manifold situations. resetWelds(); diff --git a/src/ifcgeom/representation.h b/src/ifcgeom/representation.h index 4f4a038b7c..f0caae7c5a 100644 --- a/src/ifcgeom/representation.h +++ b/src/ifcgeom/representation.h @@ -56,18 +56,18 @@ namespace ifcopenshell::geom { class IFC_GEOM_API brep : public representation { private: - const ifcopenshell::geom::conversion_results shapes_; + const std::vector shapes_; brep(const brep& other); brep& operator=(const brep& other); public: - brep(const ifcopenshell::geom::settings& settings, const std::string& entity, const std::string& id, const ifcopenshell::geom::conversion_results& shapes) + brep(const ifcopenshell::geom::settings& settings, const std::string& entity, const std::string& id, const std::vector& shapes) : representation(settings, entity, id) , shapes_(shapes) {} virtual ~brep() {} - ifcopenshell::geom::conversion_results::const_iterator begin() const { return shapes_.begin(); } - ifcopenshell::geom::conversion_results::const_iterator end() const { return shapes_.end(); } - const ifcopenshell::geom::conversion_results& shapes() const { return shapes_; } + std::vector::const_iterator begin() const { return shapes_.begin(); } + std::vector::const_iterator end() const { return shapes_.end(); } + const std::vector& shapes() const { return shapes_; } ifcopenshell::geom::conversion_result_shape* as_compound(bool force_meters = false) const; bool calculate_volume(double&) const; diff --git a/src/ifcwrap/IfcGeomWrapper.i b/src/ifcwrap/IfcGeomWrapper.i index 604cae153f..c8142f3668 100644 --- a/src/ifcwrap/IfcGeomWrapper.i +++ b/src/ifcwrap/IfcGeomWrapper.i @@ -1036,7 +1036,7 @@ struct shape_rtti : public boost::static_visitor // https://github.com/IfcOpenShell/IfcOpenShell/issues/1649 instance.declaration().is("IfcProfileDef") ) { - ifcopenshell::geom::conversion_results shapes; + std::vector shapes; try { shapes = kernel.convert(instance); } catch (...) {