From c8a9d5b743b1c8f176b17330da65228251426cc1 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Wed, 13 Mar 2024 13:17:40 +0100 Subject: [PATCH] Address comment by @RickBrice --- .../mapping/IfcFixedReferenceSweptAreaSolid.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/ifcgeom/mapping/IfcFixedReferenceSweptAreaSolid.cpp b/src/ifcgeom/mapping/IfcFixedReferenceSweptAreaSolid.cpp index fb52cef883..9db81dde01 100644 --- a/src/ifcgeom/mapping/IfcFixedReferenceSweptAreaSolid.cpp +++ b/src/ifcgeom/mapping/IfcFixedReferenceSweptAreaSolid.cpp @@ -53,10 +53,19 @@ taxonomy::ptr mapping::map_impl(const IfcSchema::IfcFixedReferenceSweptAreaSolid } } #endif - auto len = end - start; - auto nsteps = (size_t)ceil(len); - for (size_t i = 0; i <= nsteps; ++i) { - auto m4 = pwf->evaluate(start + len / nsteps * i); + auto curve_length = end - start; + auto param_type = settings_.get().get(); + auto param = settings_.get().get(); + size_t num_steps = 0; + if (param_type == ifcopenshell::geometry::settings::PiecewiseStepMethod::MAXSTEPSIZE) { + // parameter is max step size + num_steps = (size_t) std::ceil(curve_length / param); + } else { + // parameter is minimum number of steps + num_steps = (size_t) std::ceil(param); + } + for (size_t i = 0; i <= num_steps; ++i) { + auto m4 = pwf->evaluate(start + curve_length / num_steps * i); /* std::stringstream ss;