diff --git a/src/Mod/Path/App/Area.cpp b/src/Mod/Path/App/Area.cpp index 79c217e9f4..fe552ecbd9 100644 --- a/src/Mod/Path/App/Area.cpp +++ b/src/Mod/Path/App/Area.cpp @@ -65,6 +65,7 @@ # include # include # include +# include # include # include # include @@ -134,6 +135,20 @@ AreaParams::AreaParams() :PARAM_INIT(PARAM_FNAME,AREA_PARAMS_AREA) {} +void AreaParams::dump(const char *msg) const { + +#define AREA_PARAM_PRINT(_param) \ + ss << PARAM_FNAME_STR(_param) << " = " << PARAM_FNAME(_param) << '\n'; + + if(FC_LOG_INSTANCE.level()>FC_LOGLEVEL_TRACE) { + std::ostringstream ss; + ss << msg << '\n'; + PARAM_FOREACH(AREA_PARAM_PRINT, AREA_PARAMS_AREA) + + FC_MSG(ss.str()); + } +} + CAreaConfig::CAreaConfig(const CAreaParams &p, bool noFitArcs) { #define AREA_CONF_SAVE_AND_APPLY(_param) \ @@ -342,7 +357,12 @@ static std::vector discretize(const TopoDS_Edge &edge, double deflection // same for any other discetization algorithm, althgouth it seems only // QuasiUniformDeflection has this bug. - GCPnts_QuasiUniformDeflection discretizer(curve, deflection, first, last); + // NOTE: QuasiUniformDeflection has trouble with some B-Spline, see + // https://forum.freecadweb.org/viewtopic.php?f=15&t=42628 + // + // GCPnts_QuasiUniformDeflection discretizer(curve, deflection, first, last); + // + GCPnts_UniformDeflection discretizer(curve, deflection, first, last); if (!discretizer.IsDone ()) Standard_Failure::Raise("Curve discretization failed"); if(discretizer.NbPoints () > 1) { @@ -871,7 +891,9 @@ struct WireJoiner { if(info.p1.SquareDistance(info.p2)