diff --git a/code/IFCGeometry.cpp b/code/IFCGeometry.cpp index 908f5e065..332b2af56 100644 --- a/code/IFCGeometry.cpp +++ b/code/IFCGeometry.cpp @@ -330,7 +330,11 @@ void ProcessSweptDiskSolid(const IfcSweptDiskSolid solid, TempMesh& result, Conv const unsigned int cnt_segments = conv.settings.cylindricalTessellation; const IfcFloat deltaAngle = AI_MATH_TWO_PI/cnt_segments; - const size_t samples = curve->EstimateSampleCount(solid.StartParam,solid.EndParam); + TempMesh temp; + curve->SampleDiscrete(temp, solid.StartParam, solid.EndParam); + const std::vector& curve_points = temp.verts; + + const size_t samples = curve_points.size(); result.verts.reserve(cnt_segments * samples * 4); result.vertcnt.reserve((cnt_segments - 1) * samples); @@ -338,10 +342,6 @@ void ProcessSweptDiskSolid(const IfcSweptDiskSolid solid, TempMesh& result, Conv std::vector points; points.reserve(cnt_segments * samples); - TempMesh temp; - curve->SampleDiscrete(temp,solid.StartParam,solid.EndParam); - const std::vector& curve_points = temp.verts; - if(curve_points.empty()) { IFCImporter::LogWarn("curve evaluation yielded no points (IfcSweptDiskSolid)"); return; diff --git a/code/IFCReaderGen1.cpp b/code/IFCReaderGen1.cpp index bd526d454..622976819 100644 --- a/code/IFCReaderGen1.cpp +++ b/code/IFCReaderGen1.cpp @@ -2652,6 +2652,7 @@ template <> size_t GenericFill(const DB& db, const LIST& params, I size_t base = 0; if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcNamedUnit"); } do { // convert the 'Dimensions' argument std::shared_ptr arg = params[base++]; + if (dynamic_cast(&*arg)) break; if (dynamic_cast(&*arg)) { in->ObjectHelper::aux_is_derived[0]=true; break; } try { GenericConvert( in->Dimensions, arg, db ); break; } catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcNamedUnit to be a `IfcDimensionalExponents`")); }